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