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