【发布时间】:2017-02-09 02:44:50
【问题描述】:
我需要准确计算 NSTextField 的大小(因为我需要该值来计算 NSTextField 所在的 NSTableView 行的高度)。我现在有一个粗略的近似值,但它似乎不正确(而且我不想硬编码捏造它......)。
我的近似涉及创建一个临时单元格,向其中添加适当的文本,然后根据该文本计算高度:
func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat
{
let textDistanceFromTableEdge = 192
if let cell = tableView.make(withIdentifier: "IncomingMessage", owner: nil) as? IncomingMessage
{
cell.message.stringValue = messages[row].message
let width = ((tableView.tableColumns.last?.width)! - textDistanceFromTableEdge)
let height = (cell.message.cell!.cellSize(forBounds: NSMakeRect(CGFloat(0.0), CGFloat(0.0), width, CGFloat(FLT_MAX))).height)
return (height + 50)
}
}
这通常会得到正确的结果,但只是略有偏差(通常,当一个单词换行到下一行时,它不会导致单元格高一行)。
【问题讨论】:
-
一旦消息出现在您的表格视图中,您是否打算允许用户对其进行编辑?
-
第一次调用
drawingRectForBounds并使用cellSizeForBounds中的结果。 -
@PaulPatterson :不。消息不会被编辑(它是一个聊天气泡,就像在 iMessage/Whatsapp/Facebook 中一样)。
-
@Willeke:您介意提供一个代码示例来准确解释您的意思吗?如果可行,我可以将其标记为答案。
-
抱歉,我忘了问:包含消息的列会调整大小吗?
标签: swift cocoa nstableview nstextfield