NSTableCellView填充

时间:2014-11-25 19:15:30

标签: objective-c xcode cocoa nstableview nstablecellview

如何向NSTableCellView添加填充?

我希望内容的填充量为10px,类似于纯HTML中的内容。 (所有面)。文本应该在中间垂直居中。

目前我正在NSTextFieldCell的子类中执行此操作。但这似乎无法正常工作。

编辑文本时,编辑文本字段不使用textfieldcell中的填充。

图片2: Check image

Check image

以下是我目前拥有的代码(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; 
}

2 个答案:

答案 0 :(得分:4)

以下是获取填充的一些选项。

早些时候我在NSAttributedString获取正确的边界框高度时遇到了一些问题。我不记得我是如何解决它们的,但有some discussions就此问题。

想法#1:

使用NSTableView's intercell spacing。它也可以从表视图的大小选项卡中在Interface Builder中使用。寻找细胞间距。

想法#2:

编辑界面时:

  • 除非您需要其他内容,否则请使用Apple提供的文本或图片和文本表格单元格视图。
  • 使用尺寸标签更改表格视图中的表格单元格视图的高度。
  • 重新定位表格单元格视图中的文本字段。

想法#3:

使用自定义单元格。

  • 您可以通过覆盖-[NSTextFieldCell editWithFrame:inView:editor:delegate:event:]来更改字段编辑器位置。还有-[NSTextFieldCell setUpFieldEditorAttributes]。我发现 this sample code 很有用。
  • 如果您增加单元格的高度,可以a couple of ways使NSTextFieldCell垂直居中绘制文本。

答案 1 :(得分:-1)

使用setContentInset方法。它设置内容视图和封闭表视图之间的插入距离。

例如

self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, -20, 0);