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

标签 swift cocoa nstableview nstextfield

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

相关文章:

ios - 将按钮的字体大小设置为最大以适合宽度和高度

swift - 如何比较 Swift 中的范围?

objective-c - Objective-C - 将 char[] 转换为十六进制格式的 NSString

javascript - 在 Cocoa Objective-C 代码的 WebView 中调用 javascript - click()

macos - Cocoa WebView中如何识别用户发起的请求?

macos - NSTextfield NSPopover 的透明背景

ios - 如何在 Swift iOS 中关闭上一个 View Controller 并移至下一个 View Controller

swift - 错误 : Extra parameter in request i used Swift 4. 为什么我必须传递类型为 [String : Any]? 的参数

objective-c - 检测双击 NSTableview header

objective-c - 使用自动布局增大和缩小表格 View