有没有办法将NSScroller 叠加在滚动视图的内容上(如在iOS中)?我已经尝试了几种方法:
a)设置滚动视图内容视图(NSClipView)的框架以扩展到滚动条的边界
b)添加NSScroller对象作为滚动视图的子视图(位于我想要的位置)
c)创建一个完全自定义的滚动视图并将其作为子视图放置(这很有效,但这意味着我需要重写NSScroller的所有功能)
Sparrow似乎成功地执行了此操作,并且它似乎通过常规NSScroller子类来执行此操作(因为它响应系统首选项>>外观中设置的滚动设置)。这并不是真正吸引滚动条的问题,只是让它覆盖了内容。
感谢任何建议: - )
答案 0 :(得分:7)
Here's where you can set the custom class of your scrollbars.
之后,通过覆盖-tile
的{{1}}方法,您可以正确放置它们。
答案 1 :(得分:4)
这是我的解决方案: 创建一个扩展NSScroller
的MyScroller类在MyScroller.m中:
#import "MyScroller.h"
@implementation MyScroller
+(CGFloat) scrollerWidth{
return 10;
}
+(CGFloat) scrollerWidthForControlSize:(NSControlSize)controlSize{
return 10;
}
- (void) drawBackground:(NSRect) rect{
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:0 yRadius:0];
[[NSColor whiteColor] set];
[path fill];
}
- (void)drawKnob{
[self drawBackground:[self rectForPart:0]];
[self drawBackground:[self rectForPart:1]];
[self drawBackground:[self rectForPart:2]];
[self drawBackground:[self rectForPart:4]];
[self drawBackground:[self rectForPart:5]];
[self drawBackground:[self rectForPart:6]];
NSRect knobRect = [self rectForPart:NSScrollerKnob];
NSRect newRect = NSMakeRect((knobRect.size.width - [MyScroller scrollerWidth]) / 2, knobRect.origin.y, [MyScroller scrollerWidth], knobRect.size.height);
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:newRect xRadius:5 yRadius:5];
[[NSColor grayColor] set];
[path fill];
}
@end
然后只需在Interface Builder中为Scroller设置自定义类。