1

我有一个NSTextView,这是滚动条的正常大小:
在此处输入图像描述
当我悬停 textview 的滚动条时会发生这种情况:
在此处输入图像描述
但是,我不想有这种“扩展”效果。我怎样才能删除它?我试图搜索如何执行此操作,但我找不到任何东西。我只想一直拥有常规的滚动条大小(较薄的),即使用户将其悬停。这可能吗?
谢谢

4

2 回答 2

2

我建议子类化 NSScroller 并覆盖– drawArrow:highlight://方法– drawKnobSlotInRect:highlight:– drawKnob以便您拥有稳定的滚动条外观。

PS不要忘记在XIB文件中为滚动条设置新的滚动条类。

更新

这是示例代码:

- (void)drawKnob
{
    // call the default implementation for Overlay Scrollers
    if (self.scrollerStyle == NSScrollerStyleOverlay)
    {
        [super drawKnob];
        return;
    }

    if (_style == NSScrollerKnobStyleLight || _style == NSScrollerKnobStyleDefault)
            [[NSColor colorWithCalibratedWhite:1.0 alpha:0.8] setFill];
    else [[NSColor colorWithCalibratedWhite:0 alpha:0.4] setFill];

    // Note: you can specify the rect with fixed width here
    NSRect knobRect = [self rectForPart:NSScrollerKnob];

    // VERTICAL SCROLLER
    NSInteger fullWidth = knobRect.size.width;
    knobRect.size.width = round(knobRect.size.width/2);
    knobRect.origin.x += (NSInteger)((fullWidth - knobRect.size.width)/2);

    // draw...
    NSBezierPath * thePath = [NSBezierPath bezierPath];

    [thePath appendBezierPathWithRoundedRect:knobRect xRadius:4 yRadius:4];
    [thePath fill];
}

//---------------------------------------------------------------

- (void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag
{
    // call the default implementation for Overlay Scrollers
    // draw nothing for usual
    if (self.scrollerStyle == NSScrollerStyleOverlay)
    {
        [super drawKnobSlotInRect:slotRect highlight:flag];
    }
}

//---------------------------------------------------------------

- (void)drawArrow:(NSScrollerArrow)whichArrow highlight:(BOOL)flag
{   
    // call the default implementation for Overlay Scrollers
    // draw nothing for usual
    if (self.scrollerStyle == NSScrollerStyleOverlay)
    {
        [super drawArrow:whichArrow highlight:flag];
    }
}
于 2013-05-14T15:32:45.437 回答
0

我不知道你想要什么确切的风格,但这个类别可能会对你有所帮助。

@implementation NSScrollView (SetScrollStyle)

- (void) setHidingScroll
{
    [self setScrollerStyle:NSScrollerStyleOverlay];
    [[self verticalScroller] setControlSize: NSSmallControlSize];
    [[self verticalScroller] setKnobStyle:NSScrollerKnobStyleDark];
    [self setScrollerKnobStyle:NSScrollerKnobStyleDark];
    [[self verticalScroller] setScrollerStyle:NSScrollerStyleOverlay];
}

和使用

[scrollView setHidingScroll];
于 2013-05-13T07:17:37.293 回答