0
我有一個NSTableView,創建自IB,我只想自動隱藏水平滾動條。我想這樣做的主要原因是因爲如果有垂直滾動條,NSTableView corverView只會顯示get。自動隱藏NSScrollView中只有水平滾動條
我找不到任何方法與基類做到這一點。所以我嘗試了繼承NSScrollView並觀察水平滾動條上的隱藏鍵(代碼如下)。這有效;但是,每次用戶調整窗口大小時,視圖都會嘗試重置當前的可見選項。這使我的實施有點貴;看起來不雅。有關如何做到這一點的更好的想法?
在此先感謝!
當前實現:
@interface PVScrollView : NSScrollView {
BOOL autohidesHorizontalScroller;
}
@property(assign) BOOL autohidesHorizontalScroller;
- (void) viewResized:(NSNotification*)notification;
@end
@implementation PVScrollView
@synthesize autohidesHorizontalScroller;
- (void) setAutohidesHorizontalScroller:(BOOL)val
{
autohidesHorizontalScroller = val;
[self setAutohidesScrollers:NO];
[[self horizontalScroller] addObserver:self
forKeyPath:@"hidden"
options:0
context:nil];
}
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if (!([self documentVisibleRect].size.width < [[self documentView] frame].size.width))
{
// remove observer
[[self horizontalScroller] removeObserver:self
forKeyPath:@"hidden"];
[[self horizontalScroller] setHidden:YES];
//[[self horizontalScroller] setNeedsDisplay:YES];
// add it back
[[self horizontalScroller] addObserver:self
forKeyPath:@"hidden"
options:0
context:nil];
}
}
@end
我會說,不要擔心它,直到你發現它實際上會導致性能問題。過早優化是不好的。 – 2011-02-16 09:15:08
我傾向於同意Douwe,但是我想補充一點,通過使用Instruments來分析代碼,您仍然可以很容易地找到潛在的性能問題。過早優化並不總是如此。有時候分析一些東西,而在知道它可能表現不佳時進行壓力測試是唯一合乎邏輯的事情。忽略它直到它引發問題,當你知道它可能從頭開始時,比「過早」優化更不合邏輯。 :-) – 2011-02-16 16:53:04