我知道有关该主题的文章很多,但是它们以某种方式并没有使我找到解决方案,而在尝试了几天之后,我不知道该怎么办。
所以我有一个UICollectionView
,其中有一个标题。对于标题,我创建了自己的UICollectionReusableView
。它包含一个带有两个标签的StackView。它们都具有动态大小(线= 0)。这些是StackView的约束(我也尝试将底部约束设置为= 0):
StackView约束
我这样计算标头大小...
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
let item = displayItems.object(at: UInt(section)) as! MySectionDisplayItem
let reusableView: MyReusableView = UIView.fromNib()
reusableView.setTitle(text: item.getTitle())
.setSubtitle(subtitle: item.getSubtitle())
return reusableView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
}
...并返回要显示的视图,如下所示:
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let item = displayItems.object(at: UInt(indexPath.section)) as! MySectionDisplayItem
let reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "myReusableView", for: indexPath) as! MyReusableView
reusableView.setTitle(text: item.getTitle())
.setSubtitle(subtitle: item.getSubtitle())
return reusableView
}
在我的UICollectionReusableView
和UICollectionView
中启用了自动版式。
我尝试过的一些事情:
preferredMaxLayoutWidth
设置为不同的正值我希望我不会混淆发现的一些解决方案,但是无论如何,我认为这样的“简单”事情很难实现。
答案 0 :(得分:0)
我终于通过限制宽度解决了这个问题:
reusableView.translatesAutoresizingMaskIntoConstraints = true
reusableView.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width).isActive = true
可能还需要在内容压缩方面发挥作用。