6

にパディングを追加するにはどうすればよいNSTableCellViewですか?

プレーンな HTML で行う場合と同様に、コンテンツに 10px のパディングが必要です。(すべての側面)。テキストは垂直方向の中央に配置する必要があります。

現時点では、NSTextFieldCell のサブクラスでこれを行っています。しかし、これは正しく機能していないようです。

テキストを編集すると、編集テキスト フィールドは textfieldcell のパディングを使用しません。

画像 2: 画像確認

画像確認

これが私が現在持っているコードです(のサブクラスNSTextFieldCell

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
NSRect titleRect = [self titleRectForBounds:cellFrame];

NSAttributedString *aTitle = [self attributedStringValue];
if ([aTitle length] > 0) {
    [aTitle drawInRect:titleRect];
}
}

- (NSRect)titleRectForBounds:(NSRect)bounds
{
NSRect titleRect = bounds;

titleRect.origin.x += 10;
titleRect.origin.y = 2;

NSAttributedString *title = [self attributedStringValue];
if (title) {
    titleRect.size = [title size];
} else {
    titleRect.size = NSZeroSize;
}

// We don't want the width of the string going outside the cell's bounds
CGFloat maxX = NSMaxX(bounds);
CGFloat maxWidth = maxX - NSMinX(titleRect);
if (maxWidth < 0) {
    maxWidth = 0;
}

titleRect.size.width = MIN(NSWidth(titleRect), maxWidth);

return titleRect; 
}
4

2 に答える 2

6

以下は、パディングを取得するためのいくつかのオプションです。

以前、 の正しいバウンディング ボックスの高さを取得する際に問題が発生しましたNSAttributedString。それらをどのように解決したかは覚えていませんが、この問題についていくつかの議論があります。

アイデア #1:

NSTableView のセル間間隔を使用します。また、テーブル ビューのサイズ タブから Interface Builder で使用することもできます。セル間隔を探します。

アイデア #2:

インターフェイスを編集する場合:

  • 他に何か必要な場合を除き、Apple が提供するテキストまたは画像とテキスト テーブル セル ビューを使用してください。
  • サイズ タブを使用して、テーブル ビュー内のテーブル セル ビューの高さを変更します。
  • テーブル セル ビュー内のテキスト フィールドの位置を変更します。

アイデア #3:

カスタム セルを使用します。

  • をオーバーライドすることで、フィールド エディターの位置を変更できます-[NSTextFieldCell editWithFrame:inView:editor:delegate:event:]。もあり-[NSTextFieldCell setUpFieldEditorAttributes]ます。このサンプル コードは役に立ちました。
  • セルの高さを増やす場合、テキストを垂直方向の中央に描画する方法がいくつかあります。NSTextFieldCell
于 2014-11-28T00:52:13.147 に答える
-1

setContentInset メソッドを使用します。コンテンツ ビューと囲んでいるテーブル ビューの間のインセットの距離を設定します。

例えば

self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, -20, 0);
于 2014-11-28T16:12:47.950 に答える