Как отключить эффект расширения при наведении курсора мыши на скроллер 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];