Как отключить эффект расширения при наведении курсора мыши на скроллер NSScrollView NSTextView?

У меня есть NSTextView и вот обычный размер скроллера:

И вот что происходит, когда я наведите курсор на текстовое представление:

Тем не менее, я не хочу иметь этот эффект "расширения". Как я могу удалить это? Я пытался найти, как это сделать, но ничего не смог найти. Я просто хочу иметь постоянный размер скроллера (более тонкий) все время, даже если пользователь наводит на него курсор. Это возможно?
Спасибо

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];
    }
}

Я не знаю, какой именно стиль вы хотите, но эта категория может вам помочь.

@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];
Другие вопросы по тегам