2010-08-05 5 views

ответ

1

Уже answered elsewhere on stackoverflow от mekentosj. Класс для подкласса - NSScrollView.

@interface MyScrollView : NSScrollView { 
} 
@end 


@implementation MyScrollView 

- (void)drawRect:(NSRect)rect{ 
    [super drawRect: rect]; 

    if([self hasVerticalScroller] && [self hasHorizontalScroller]){ 
     NSRect vframe = [[self verticalScroller]frame]; 
     NSRect hframe = [[self horizontalScroller]frame]; 
     NSRect corner; 
     corner.origin.x = NSMaxX(hframe); 
     corner.origin.y = NSMinY(hframe); 
     corner.size.width = NSWidth(vframe); 
     corner.size.height = NSHeight(hframe); 

     // your custom drawing in the corner rect here 
     [[NSColor redColor] set]; 
     NSRectFill(corner); 
    } 
} 
@end 
0

Вид странно, но только подклассов NSScrollView и первостепенную вничью с super.drawRect() сделал мой NSScrollView (не) заполнить в углу с белым. Я проверил его 2x, чтобы убедиться, что это не имеет большого смысла.

import Cocoa 

class ThemedScrollView: NSScrollView { 
    override func drawRect(dirtyRect: NSRect) { 
     super.drawRect(dirtyRect) 
    } 
} 

Вот Swift вариация оригинального ответа, а также:

import Cocoa 

class ThemedScrollView: NSScrollView { 

    override func drawRect(dirtyRect: NSRect) { 
     super.drawRect(dirtyRect) 

     if hasVerticalScroller && hasHorizontalScroller { 
      guard verticalScroller != nil && horizontalScroller != nil else { return } 

      let vFrame = verticalScroller!.frame 
      let hFrame = horizontalScroller!.frame 
      let square = NSRect(origin: CGPoint(x: hFrame.maxX, y: vFrame.maxY), size: CGSize(width: vFrame.width, height: hFrame.height)) 

      let path = NSBezierPath(rect: square) 
      let fillColor = NSColor.redColor() 
      fillColor.set() 
      path.fill() 
     } 
    } 
} 
Смежные вопросы