gpt4 book ai didi

swift - 准确获取 NSTextField 包装大小 (Swift)

转载 作者:行者123 更新时间:2023-11-30 13:02:15 25 4
gpt4 key购买 nike

我需要准确计算 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)
}
}

这通常会得到正确的结果,但只是略有偏差(通常,当单个单词换行到下一行时,不会导致单元格高出一行)。

最佳答案

这似乎有效:

    let width = self.textField.bounds.width
let cell = (self.textField.cell() as? NSCell)!
let rect = cell.drawingRectForBounds(NSMakeRect(CGFloat(0.0), CGFloat(0.0), width, CGFloat(CGFloat.max)))
let size = cell.cellSizeForBounds(rect)
self.textField.setFrameSize(NSMakeSize(width, size.height))

类似的问题采用不同的解决方案:NSTextFieldCell's cellSizeForBounds: doesn't match wrapping behavior?

关于swift - 准确获取 NSTextField 包装大小 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39792918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com