Reputation: 5175
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
:
I can't seem to find a property to remove it. I know it can be removed, because the Finder doesn't have it:
When I disable Headers, the border is not there. I should also note that the NSTableView
is located inside an NSSplitView
. Any ideas?
Upvotes: 6
Views: 1447
Reputation: 7719
Another solution is to:
NSTableHeaderView
-drawRect:
to draw a 1pt white line horizontally across the top to match the table header view's background color.-initWithFrame:
passing in the existing headerView
's frame.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()
}
}
Upvotes: 3
Reputation: 2453
The problem exists because both the window frame and the table view's scroll view have a 1px border. Depending on your layout you can either set the borderStyle
of the NSScrollView
that encloses your NSTableView
to NSNoBorder
(note that this will remove the 1px border from all sides of the scroll view). Or you can move the scroll view up by 1px.
Upvotes: 0