Chế độ xem NSTableView
dựa trên chế độ xem với các hàng có chiều cao động không thay đổi kích thước các hàng khi kích thước chế độ xem bảng được thay đổi. Đây là một vấn đề khi chiều cao hàng có nguồn gốc từ chiều rộng của bảng xem (nghĩ rằng khối văn bản điền vào một cột và kết thúc tốt đẹp do đó mở rộng kích thước hàng).Thay đổi kích thước hàng chính xác trên NSTableView
Tôi đã cố gắng để có được NSTableView
để thay đổi kích thước hàng của mình bất cứ khi nào nó thay đổi kích thước nhưng đã có kinh nghiệm ít thành công:
- Nếu tôi thay đổi kích thước chỉ có các hàng có thể nhìn thấy bằng cách truy vấn
enumerateAvailableRowViewsUsingBlock:
, một số các hàng không nhìn thấy được không được thay đổi kích cỡ và do đó được hiển thị với chiều cao cũ khi người dùng cuộn và hiển thị các hàng này. - Nếu tôi thay đổi kích thước tất cả các hàng, nó sẽ trở nên chậm đáng kể khi có nhiều hàng (khoảng 1 giây trễ sau mỗi cửa sổ đổi kích thước cho 1000 hàng trong 1,8Ghz i7 MacBook Air).
Bất kỳ ai cũng có thể trợ giúp?
Đây là nơi tôi phát hiện xem bảng thay đổi kích thước - trong giao diện bảng của đại biểu:
- (void)tableViewColumnDidResize:(NSNotification *)aNotification
{
NSTableView* aTableView = aNotification.object;
if (aTableView == self.messagesView) {
// coalesce all column resize notifications into one -- calls messagesViewDidResize: below
NSNotification* repostNotification = [NSNotification notificationWithName:BSMessageViewDidResizeNotification object:self];
[[NSNotificationQueue defaultQueue] enqueueNotification:repostNotification postingStyle:NSPostWhenIdle];
}
}
Trong khi đây là xử lý các thông báo đăng tải trên, nơi các hàng có thể nhìn thấy được thay đổi kích cỡ:
-(void)messagesViewDidResize:(NSNotification *)notification
{
NSTableView* messagesView = self.messagesView;
NSMutableIndexSet* visibleIndexes = [NSMutableIndexSet new];
[messagesView enumerateAvailableRowViewsUsingBlock:^(NSTableRowView *rowView, NSInteger row) {
if (row >= 0) {
[visibleIndexes addIndex:row];
}
}];
[messagesView noteHeightOfRowsWithIndexesChanged:visibleIndexes];
}
Việc thực hiện thay thế mà thay đổi kích thước tất cả các hàng trông như thế này:
-(void)messagesViewDidResize:(NSNotification *)notification
{
NSTableView* messagesView = self.messagesView;
NSIndexSet indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0,messagesView.numberOfRows)];
[messagesView noteHeightOfRowsWithIndexesChanged:indexes];
}
Lưu ý: Câu hỏi này có phần liên quan đến View-based NSTableView with rows that have dynamic heights nhưng tập trung hơn vào việc phản hồi thay đổi kích thước của chế độ xem bảng.
Đối với tôi, tôi đợi cho đến khi người dùng đã hoàn tất thay đổi kích thước rồi điều chỉnh lại chiều cao của hàng. – adib
dường như chế độ xem nội dung dạng xem cuộn không đăng thông báo thay đổi, ngay cả sau khi gọi '[self.scrollView.contentView setPostsBoundsChangedNotifications: YES]' – adib
có vẻ như NSViewFrameDidChangNotification hoạt động tốt hơn để thay đổi kích thước trực tiếp –