2013-05-09 94 views
1

我有一個NSTextView和這裏的滾動條的正常大小:
enter image description here
這裏就是發生在我懸停的TextView的滾動條:
enter image description here
不過,我不希望有這樣的「擴大'效應。我怎樣才能刪除它?我試圖搜索如何執行此操作,但我找不到任何東西。我只是想要一直使用普通的卷軸大小(即更薄的大小),即使用戶使用它。這可能嗎?
謝謝如何在NSTextView的NSScrollView滾輪上禁用鼠標懸停展開效果?

+0

你爲什麼要強迫你的用戶提供不斷所謂薄的iOS風格的滾動條,這是很難打,用鼠標指針亂動?!我真的希望這不是「美學」! – 2013-05-15 20:24:41

回答

2

我建議子類NSScroller和覆蓋– drawArrow:highlight:/– drawKnobSlotInRect:highlight:/– drawKnob方法,讓你有一個穩定的滾動條的外觀。

P.S.不要忘記在XIB文件中爲滾動條設置新的滾動條類。

UPDATE

下面是示例代碼:

- (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]; 
    } 
} 
+0

您能否更具體地在這些方法的內部做些什麼?我已經玩過這些方法,我有點了,但滾動只是不離開(鼠標)滾動條後隱藏 – 2013-05-14 17:08:52

+1

我更新了我的答案與示例代碼。是的,非疊加滾動條不會隱藏,但始終存在。如果你想模擬iOS的滾動器行爲,也許你應該尋找像https://github.com/rheinfabrik/RFOverlayScrollView – UJey 2013-05-14 18:44:45

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]; 
+0

感謝您的回答,但是當我將鼠標懸停在滾動條上時,效果仍然存在 – 2013-05-13 09:52:48