标题应为:根据NSTableCellView的NSTextField内容固有内容大小自动调整基于NSTableView视图的包含NSWindow的宽度。
有点像this other question,我想实现一个自动完成的NSWindow,里面有一个NSTableView,它可以调整为在NSTableCellView中作为NSTextField实现的可用自动完成的长度宽度。显然,每个自动完成应显示在一行......
之前的问题已得到解答,但仅与NSTableView的高度相关。我想知道怎么做"相同"对于宽度。我想尽可能使用自动布局来实现解决方案。
我试图设置水平"内容拥抱优先级"和#34;内容压缩阻力优先"参与NSWindow最终展示的每个视图元素的最大值为1000。我当时认为NSTextField的内在内容大小会强制所有其他元素调整,但它不起作用。
设置NSTableColumn宽度不起作用,因为NSScrollView的NSClipView未被此宽度修改:NSScrollView调整并创建水平滚动条以覆盖整个"文档"。
以下是展示问题的示例项目的链接:
任何帮助将不胜感激!
答案 0 :(得分:0)
我使用此代码解决了问题,其中scrollViewWidthConstraint是NSOcrollView宽度约束的IBOutlet,localTableView是NSTableView的IBOutlet,tableColumn是NSTableColumn的IBOutlet(在我的情况下是唯一的)。
注意:GitHub上的链接项目已更新。
override func viewDidLoad() {
super.viewDidLoad()
self.updateTable()
}
func updateTable() {
localTableView.reloadData()
var computedWidth: CGFloat = 0
for var row = 0; row < 10; row++ {
let tableCellView = self.tableView(localTableView, viewForTableColumn: tableColumn, row: row) as! NSTableCellView
computedWidth = max(computedWidth, tableCellView.textField!.intrinsicContentSize.width)
}
scrollViewWidthConstraint!.constant = computedWidth
scrollView.needsUpdateConstraints = true
}