修改NSScrollView滚动条的颜色
项目中需要修改滚动条的颜色,查阅自己资料,自己总结,可以按照如下方式实现:
首先自定义滚动条,CustomScroller.h文件
#import <Cocoa/Cocoa.h>
@interface CustomScroller : NSScroller
@end
CustomScroller.m文件
#import "CustomScroller.h"
@implementation CustomScroller
- (void)drawKnob {
[super drawKnob];
NSRect knobRect = NSInsetRect([self rectForPart:NSScrollerKnob], 3, 0);
NSBezierPath *bezierPath = [NSBezierPath bezierPathWithRoundedRect:knobRect xRadius:3 yRadius:3];
[[NSColor redColor] set];
[bezierPath fill];
}
@end
经过上述步骤,项目中使用Scroller
tableContainerView.verticalScroller = [[CustomScroller alloc] init];
最终颜色是变了,但是,滚动条不消失。
最终引用RFOverlayScrollView实现,但是它这个不能修改颜色,因此将上述- (void)drawKnob
加入RFOverlayScroller类中即可实现修改滚动条颜色功能。细节如颜色、圆角、宽度等可根据个人需要调整,总体思路就是这样
以下是我想提交到Stack Overflow网站的回答,可惜由于以前回答不认真,账号被封,提交不了,索性提交给咱们CSDN用吧。
I need to set scroller color with red, I achieved it by follow:
- write a subclass of NSScroller
- override drawKnob
-(void)drawKnob {
[super drawKnob];
NSRect knobRect = NSInsetRect([self rectForPart:NSScrollerKnob], 3, 0);
NSBezierPath *bezierPath = [NSBezierPath bezierPathWithRoundedRect:knobRect xRadius:3 yRadius:3];
[[NSColor redColor] set];
[bezierPath fill];
}
But I found scroller will never disappear, finally I used RFOverlayScrollView and add these code to class of RFOverlayScroller resolved it finally, hope it is helpful for you!