我有一个从 IB 创建的 NSTableView,我只想自动隐藏水平滚动条。我想这样做的主要原因是因为似乎 NSTableView corverView 只有在有垂直滚动条时才会显示。
我找不到使用基类执行此操作的任何方法。所以我尝试继承 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