2011-11-25 59 views
4

对于我的第一个Mac应用程序,我试图用一个表视图来制作一个简单的窗口。我启用了头,但它在我的NSTableHeaderView顶部增加了一个烦人的行:NSTableHeaderView添加一行?

enter image description here

我似乎无法找到一个属性将其删除。我知道这是可以去掉的,因为Finder无权它:

enter image description here

当我禁用头,边框是不存在的。我还应该注意到NSTableView位于NSSplitView内。有任何想法吗?

+0

我没有看到这种行为。你能把桌面视图向上移动一个像素吗?它有可能不在视图的绝对顶部吗? –

回答

0

问题的存在是因为窗口框架和表视图的滚动视图都具有1px边框。根据您的布局,您可以将包含NSTableViewNSScrollViewborderStyle设置为NSNoBorder(请注意,这将从滚动视图的所有侧面移除1px边框)。或者您可以将滚动视图向上移动1px。

+0

我已经设置了'NSNoBorder',但向上移动1px解决了它(不能相信我没有想到这一点)。 Finder似乎也是这样做的,因为两幅图像之间确实存在1px的差异。谢谢您的帮助。 – Rits

+0

如果表视图位于分割视图内,则可能无法将其向上移动,因为它是由分割视图自动排列的。在这种情况下,只需将自定义视图放入分割视图中,然后将表视图放入自定义视图中即可。 –

1

另一个解决方案是:

  1. 子类NSTableHeaderView
  2. 覆盖-drawRect:水平地画出1点白线在顶部以匹配表头视图的背景颜色。
  3. 使用-initWithFrame:传递现有的headerView的帧来实例化自定义标题视图的实例。
  4. 将自定义标题视图分配给表视图的headerView属性。

-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)); 
}