Satırları doğru şekilde yeniden boyutlandırma Görünümler, dinamik görünümleri olan satırları olan bir NSTableView
tablo görünümü boyutu değiştiğinde satırlarını yeniden boyutlandırmaz. Bu, satır yüksekliğinin tablo görünümünün genişliğinden türetildiği bir sorundur (bir sütunu dolduran metin bloklarını düşünün ve böylece satır boyutunu genişletir). Görünüm tabanlı NSTableView
NSTableView
almaya çalışıyordum ama biraz başarı yaşamış:
- Ben
enumerateAvailableRowViewsUsingBlock:
, görünmeyen bazı satırları sorgulayarak sadece görünür satırları yeniden boyutlandırma ise yeniden boyutlandırılmaz ve kullanıcı bu satırları kaydırıp gösterdiğinde eski yükseklikte gösterilir. - Tüm satırları yeniden boyutlandırırsam, çok sayıda satır olduğunda (1.8Ghz i7 MacBook Air'imde 1000 satır için her bir pencerede yeniden boyutlandırıldıktan sonra yaklaşık 1 saniye gecikme) fark edilir derecede yavaş olur.
Kimse yardımcı olabilir?
Tablo görünümü boyutu değişikliğini tespit burasıdır - masa görünümün temsilci:
: Aşağıdaki Oysa- (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];
}
}
görünür satırlar resized olsun yukarıda yayınlanan bildirimin ait işleyicisi olan
-(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];
}
tüm satırları boyutlandırır alternatif uygulama şuna benzer:
-(void)messagesViewDidResize:(NSNotification *)notification
{
NSTableView* messagesView = self.messagesView;
NSIndexSet indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0,messagesView.numberOfRows)];
[messagesView noteHeightOfRowsWithIndexesChanged:indexes];
}
Not: Bu soru bir şekilde View-based NSTableView with rows that have dynamic heights ile ilgilidir, ancak tablo görünümünün boyut değişikliğine yanıt vermeye daha odaklıdır.
Benim için kullanıcının yeniden boyutlandırmayı tamamlamasını bekledikten sonra satır yüksekliğini yeniden ayarlamasını bekledim. – adib
görünüşe göre, kaydırma görünümü içerik görünümü '' [self.scrollView.contentView setPostsBoundsChangedNotifications: YES] ' – adib
çağrıldıktan sonra bile NSViewFrameDidChangNotification 'ı gerçekte yazılsa da, NSViewFrameDidChangNotification için –