我的OS X应用的行高NSTableView
为<{1}}:
myTableView.rowSizeStyle = .large
我尝试在其中放入一些文字,但我发现我放入的文字不能垂直居中。
请参阅下面的代码。我有三列,前两列使用NSTextField
和NSTextView
来放置一些文字。第三个是复选框按钮。
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if (tableColumn?.identifier == "Column1") {
let field = NSTextField()
field.stringValue = "someText"
field.isBordered = false
field.isEditable = false
field.backgroundColor = NSColor.red
return field
} else if (tableColumn?.identifier == "Column2") {
let field = NSTextView()
field.string = "someText"
field.backgroundColor = NSColor.green
return field
} else if (tableColumn?.identifier == "Column3") {
let field = NSButton()
field.setButtonType(NSSwitchButton)
field.title = "check me"
return field
}
return nil
}
我的代码几乎基于Apple's document:“创建和配置NSTextField单元格”。
结果如下:
如您所见,前两列中的文本不是垂直居中的,而复选框是自动垂直居中的。
使用func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?
就像Apple文档所示,将文本放在垂直居中的正确方法是什么?
编辑: 出于某种原因,我不使用Interface Builder。因此,问题在于以编程方式对UI进行编码。
答案 0 :(得分:6)
简单的解决方案:
不要在代码中创建UI元素,请在Interface Builder中执行。链接的Apple文档声明:
最可能的情况是,您将在Interface Builder中设计一个单元格,并希望获取它,然后填充该单元格中的值
NSTextView
列删除预定义的表格单元格视图,然后在列中拖动NSTextView
实例。调整视图大小并添加缺少的AutoLayout约束。Align Center X
和Align Center Y
添加到NSTextField
对象。 NSTextField
实例,将复选框拖到视图中,同时添加Align Center Y
和其他缺少的约束。强烈建议使用Cocoa Bindings将表视图连接到数据源。
下面的屏幕截图使用完全没有代码,方法
除外func numberOfRows(in tableView: NSTableView) -> Int {
return 10
}
或者Column1
- NSTextField
列 - 将文本字段包装在NSTableCellView
实例中并指定一个框架,例如(switch
语句为如果表视图也使用了section / group rows,那么swiftier 和tableColumn
只能是nil
:
switch tableColumn!.identifier {
case "Column1":
let cellView = NSTableCellView()
// the value for y: in the frame should be row.height / 2 - textField.height / 2
let field = NSTextField(frame: NSRect(x:0.0, y:10.0, width:tableColumn!.width, height:17.0))
field.stringValue = "someText"
field.isBordered = false
field.isEditable = false
field.backgroundColor = NSColor.red
cellView.addSubview(field)
return cellView
case "Column2":
...
default: return nil
}
注意:
考虑 PS:在Interface Builder - SCNR中如此容易得多。NSTextView
列中的文字只能通过NSAttributedString
在文本视图中居中,或者您必须为封闭滚动视图指定一个框架。 / p>
答案 1 :(得分:-3)
首先,不要以实际方式创建对象,如果你想做一个继承自TabelviewCell的类,并将所有单元代码放在这里。 之后,您必须检查您尝试管理的单元格和场地的约束。
如果你简单地在stroyboard中添加字段并对它们设置约束,它将正常工作。 尝试标签,并在固定水平宽度后使其成为多线。