如何解决使用自动布局具有动态宽度项目的 NSCollectionView
我正在构建一个 NSCollectionView
水平滚动的项目,看起来像这样:
我在具有自动布局约束的 .xib 中定义了我的 NSCollectionView
项目。项目的宽度由标签的宽度加上计数标签(及其周围的药丸)的宽度定义。所有这些都由一个名为“Box”的 NSView
封装。
以下是 Box 的约束条件:
我连接了数据源,一切似乎都很好,只是我无法根据其中的视图大小更改项目的宽度。
据我所知,我不能仅仅依靠自动布局来定义这里的大小(我希望我错了),就像我在 NSTableView
中使用动态高度一样。所以我试图用 sizeforItemAt
的 NSCollectionViewDelegateFlowLayout
委托方法计算大小:
func collectionView(_ collectionView: NSCollectionView,layout collectionViewLayout: NSCollectionViewLayout,sizeforItemAt indexPath: IndexPath) -> NSSize {
let item = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "PhaseItem"),for: indexPath) as! PhaseItem
return item.Box.fittingSize
}
当我将 fittingSize
打印到控制台时,它看起来是正确的。但是我遇到了与 Box 大小相关的 Unable to simultaneously satisfy constraints
崩溃(它有一个 RoundedWrap
的子类):
"<NSLayoutConstraint:0x6000033c3890 H:|-(11)-[NSTextField:0x7ff6abf6e9f0] (active,names: '|':Avid.RoundedWrap:0x7ff6abf74840 )>","<NSLayoutConstraint:0x6000033c6300 H:[NSTextField:0x7ff6abf6e9f0]-(7)-[Avid.BadgeView:0x7ff6abf6f120] (active)>","<NSLayoutConstraint:0x6000033c5400 H:[Avid.BadgeView:0x7ff6abf6f120]-(9)-| (active,"<NSLayoutConstraint:0x6000033c39d0 H:|-(8)-[NSTextField:0x7ff6abf6f360] (active,names: '|':Avid.BadgeView:0x7ff6abf6f120 )>","<NSLayoutConstraint:0x6000033c2760 H:[NSTextField:0x7ff6abf6f360]-(8)-| (active,"<NSLayoutConstraint:0x6000033c3a20 H:|-(0)-[Avid.RoundedWrap:0x7ff6abf74840] (active,names: '|':NSView:0x7ff6abf74a80 )>","<NSLayoutConstraint:0x6000033c3b60 H:[Avid.RoundedWrap:0x7ff6abf74840]-(0)-| (active,"<NSAutoresizingMaskLayoutConstraint:0x6000033140f0 h=--& v=--& NSView:0x7ff6abf74a80.width == 0 (active)>"
如果我删除将 Box 的后缘固定到包含视图的约束,崩溃就会消失,但是我的 NSCollectionView
项目根本没有出现。
有没有更简单的方法来完成这一切?如何使用自动布局来设置我的 NSCollectionViewItem
的动态宽度?
解决方法
看来我走对了。我只需要添加:
do 1001 j=1,N
ar = IRAND()
print*,j,ar
1001 continue
像这样
item.view.layoutSubtreeIfNeeded()
为了使商品尺寸准确。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。