如何解决在 NSTableCellView
我使用故事板来设计基于视图的 NSTableView
及其具有自动布局的子视图。它工作正常并且按预期运行。
在我的 NSTableCellView
中,我有多个 NSTextField
。我希望以编程方式更改其中之一的框架。所以我尝试了这样的事情。
dataSource = NSTableViewDiffableDataSource<Section,Item>(tableView: soMetableView,cellProvider: { tableView,tableColumn,row,item -> NSView in
guard let tableCellView = tableView.makeView(withIdentifier: .soMetableCellView,owner: self) as? SoMetableCellView else {
fatalError()
}
tableCellView.randomTextField.stringValue = "Something..."
tableCellView.someTextField.stringValue = "Blah..."
//...
let size = NSSize(width: 200,height: 50)
tableCellView.someTextField.setFrameSize(size)
tableCellView.someTextField.needsLayout = true
tableCellView.needsLayout = true
return tableCellView
})
对于 tableCellView.someTextField
和 tableCellView
,我尝试了以下组合,但似乎没有任何变化:
.needsdisplay = true
.needsLayout = true
.invalidateIntrinsicContentSize()
.layoutSubtreeIfNeeded()
.updateConstraints()
.layout()
为什么这么难?我的理解是,如果我为 someTextField
设置了一个新的帧大小,然后通知 tableCellView
它需要重新计算子视图布局位置,因为 someTextField
已被修改,因此其他子视图需要重新定位自己与自动布局约束保持一致。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。