2011-11-25 58 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)); 
}