Swift / Cocoa中NSTableView的动态行高

时间:2016-09-22 16:24:14

标签: cocoa nstableview swift3

编辑:链接回复没有回答这个问题。我仍然坚持这个......

我有一张桌子用于聊天消息。每条消息都是一个可变大小的框,包括一些文本。我希望表格中的行高可以根据消息框的大小动态变化。

如果我勾选自动'对于IB中的大小样式,它使所有行都具有很小的高度。看起来iOS有UITableViewAutomaticDimension可以自动缩放表格,但我找不到类似NSTableView的内容。

我知道可以创建以下功能:

$(document).ready(function() {
    $('#Carousel').carousel({
        interval: 5000
    })
});

我可以使用它设置行高(上面将我的所有行设置为高度50),但我不知道如何使它取决于我的框中文本的大小。我怎样才能有效地做到这一点?

1 个答案:

答案 0 :(得分:0)

这是一个解决方案

首先在代码中设置NSTextfield。这是一个虚拟的"字段,因为它从未实际绘制

    var fakefield = NSTextField()  
// Set the fontsize etc to be what you will use in the table

然后在heightOfRow函数

func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat {

    let item = yourArray[row] 
    let fakefield.stringValue = item 
    // exactly how you get the text out of your data array depends on how you set it up

    let yourHeight = fakefield.cell!.cellSizeForBounds(NSMakeRect(CGFloat(0.0), CGFloat(0.0), yourWidth, CGFloat(FLT_MAX))).height
    // yourWidth = the width of your cell as CGFloat.  

    return yourHeight
}

可以找到更多详细信息和NSTextfield扩展程序Here。请注意,这个答案是在Swift 2.3中(还没有进入3)