Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSTableHeaderView adds a line?

For my first Mac app, I'm trying to make a simple window with just a table view. I enabled Headers but it adds an annoying line on top of my NSTableHeaderView:

enter image description here

I can't seem to find a property to remove it. I know it can be removed, because the Finder doesn't have it:

enter image description here

When I disable Headers, the border is not there. I should also note that the NSTableView is located inside an NSSplitView. Any ideas?

like image 533
Rits Avatar asked Nov 25 '11 01:11

Rits


1 Answers

Another solution is to:

  1. Subclass NSTableHeaderView
  2. Override -drawRect: to draw a 1pt white line horizontally across the top to match the table header view's background color.
  3. Instantiate an instance of the custom header view using -initWithFrame: passing in the existing headerView's frame.
  4. Assign the custom header view to the table view's headerView property.

Implementation of -drawRect::

- (void)drawRect:(NSRect)dirtyRect {
    // Allow the table header view to draw itself
    [super drawRect:dirtyRect];
     // Draw a 1pt white line across the width of the header view
    [[NSColor whiteColor] setFill];
    NSRectFill(NSMakeRect(0.0f, 0.0f, self.bounds.size.width, 1.0));
}

Or in Swift:

override func draw(_ dirtyRect: NSRect) {
    super.draw(dirtyRect)
    let topBorderBox = NSRect(x: 0, y: 0, width: bounds.size.width, height: 1)
    if dirtyRect.intersects(topBorderBox) {
        NSColor.white.setFill()
        topBorderBox.fill()
    }
}
like image 159
Andrew Avatar answered Nov 15 '22 05:11

Andrew