Tôi có NSTableView dựa trên khung nhìn với thiết lập NSTableCellView của khung nhìn đồ họa thông qua trình tạo giao diện trong phiên bản mới nhất của Xcode trên 10.8.2.Các ràng buộc không thỏa mãn với NSTableView khi gọi reloadData
Khi tôi gọi -reloadData trên NSTableView, nó bị treo với:
Unable to simultaneously satisfy constraints:
(
"<NSAutoresizingMaskLayoutConstraint:0x105cb8bf0 h=--& v=--& V:[NSTableRowView:0x105ca7020(0)]>",
"<NSAutoresizingMaskLayoutConstraint:0x10596aa30 h=--& v=-&- V:[GroupTableRowView]-(2)-| (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>",
"<NSAutoresizingMaskLayoutConstraint:0x1058d9770 h=--& v=-&- V:|-(1)-[GroupTableRowView] (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>"
)
Will attempt to recover by breaking constraint
<NSAutoresizingMaskLayoutConstraint:0x10596aa30 h=--& v=-&- V:[GroupTableRowView]-(2)-| (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>
Tôi không thể tắt tính năng tự động thay đổi kích thước mặt nạ dịch trên bất kỳ quan điểm tham gia như những hạn chế của họ được quản lý bởi NSTableView. Rõ ràng là các ràng buộc là mâu thuẫn bởi vì NSTableRowView không thể có chiều cao 0 trong khi vẫn đáp ứng hai ràng buộc khác trên GroupTableRowView chỉ định đệm bắt buộc giữa superview (chế độ xem hàng?). Tôi không chắc chắn làm thế nào để giải quyết này, bất kỳ thông tin chi tiết sẽ được đánh giá rất nhiều. Cảm ơn!
Cập nhật: Tôi tìm thấy giải pháp thay thế. Vấn đề là vì một số lý do NSTableRowView đã được gửi một kích thước khung hình {0, 0}
khi gọi -reloadData trên màn hình bảng. Tôi overrode -setFrameSize:
trong lớp con NSTableRowView và chỉ vượt qua tin nhắn lên chuỗi trả lời khi kích thước không phải là {0,0}
.
- (void)setFrameSize:(NSSize)newSize
{
if (!NSEqualSizes(newSize, NSZeroSize))
[super setFrameSize:newSize];
}
Để sử dụng phân lớp, hãy thực hiện phương thức của NSTableViewDelegate -tableView:rowViewForRow: để trả lại phiên bản của lớp con tùy chỉnh.
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
{
id rowView = [[GroupTableRowView alloc] init];
// configure any custom properties
return rowView;
}
Nếu xem bảng được thiết kế hoàn toàn bằng IB, bạn chỉ có thể kéo một NSView mới vào xem bảng của bạn và thiết lập nó là lớp tùy chỉnh để lớp con NSTableRowView của bạn và thay đổi nó là giao diện người dùng mục định danh để NSTableViewRowViewKey
Bump. Tôi đã gặp phải một vấn đề tương tự khi sử dụng chế độ xem bảng dựa trên chế độ xem. Bạn có thực hiện bất kỳ tiến bộ nào về vấn đề của mình không? –
Tôi đã cập nhật câu hỏi của mình với giải pháp thay thế. Tôi vẫn đang tìm kiếm lý do tại sao NSTableCellView đang được gửi '{0,0}' nhưng tôi không thể tái tạo điều này trong một ứng dụng demo để gửi báo cáo lỗi cho Apple. – Andrew
@Andrew Tôi nghĩ đây thực sự là giải pháp, cảm ơn vì điều này! – NSAddict