NSTableHeaderViewは行を追加しますか?

私の最初のMacアプリケーションでは、テーブルビューだけで簡単なウィンドウを作ろうとしています。私はヘッダーを有効にしましたが、 NSTableHeaderView の上に厄介な行を追加します:

enter image description here

私はそれを削除するプロパティを見つけることができないようです。 Finderにはこの機能がないため、削除することができます。

enter image description here

ヘッダーを無効にすると、境界線が表示されません。また、 NSTableView NSSplitView の中にあります。何か案は?

4
私はこの行動を見ていない。テーブルビューを1ピクセルだけ上に移動できますか?それはビューの絶対トップではない可能性がありますか?
追加された 著者 Rob Keniger,

2 答え

もう1つの解決策は、

  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.

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

またはスイフトで:

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()
    }
}
2
追加された

この問題は、ウィンドウ枠とテーブルビューのスクロールビューの両方に1ピクセルの境界があるために発生します。レイアウトによっては、 NSTableView NSNoBorder に囲む NSScrollView borderStyle を設定することもできますスクロールビューの全面から1ピクセルの枠線が削除されます)。または、スクロールビューを1ピクセル上に移動できます。

0
追加された
テーブルビューがスプリットビュー内にある場合、スプリットビューによって自動的に配置されるため、テーブルビューはスプリットビュー内にある場合は移動できません。その場合は、スプリットビューにカスタムビューを配置して、カスタムビューにテーブルビューを配置します。
追加された 著者 Jakob Egger,
私は既に NSNoBorder を設定していましたが、1pxで動いても解決しました(私はそれを考えなかったとは思えません)。実際には2つの画像に1pxの違いがあるので、Finderでもそういうことになります。助けてくれてありがとう。
追加された 著者 Rits,