KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
A view-based NSTableView with rows that have dynamic heights doesn't resize its rows when the table view size is changed. This is a problem when the row height is derived from the table view's width (think text blocks that fills a column and wraps thus extending the row size). I've been trying to get NSTableView to resize its rows whenever it changed size but have experienced little success: If I resize only the visible rows by querying enumerateAvailableRowViewsUsingBlock: , some of the non-visible rows doesn't get resized and thus were shown with the old height when the user scrolls and reveal these rows. If I resize all rows it becomes noticeably slow when there are a lot of rows (about 1 second delay after each window resize for 1000 rows in my 1.8Ghz i7 MacBook Air). Anybody can help? This is where I detect the table view size change - in the table view's delegate: - (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]; } } Whereas the following is the handler of the notification posted above, where the visible rows get resized: -(void)messagesViewDidResize:(NSNotification *)notification { NSTableView* messagesView = self.messagesView; NSMutableIndexSet* visibleIndexes = [NSMutableIndexSet new]; [messagesView enumerateAvailableRowViewsUsingBlock:^(NSTableRowView *rowView, NSInteger row) {
Tags (comma-separated)
Save Edits
Cancel