ios - 无法使用自动布局将简单的自行调整大小的集合视图单元格调整为标签大小
问题描述
Xcode 10.2,斯威夫特 5。
我在文件UICollectionViewCell
中定义了一个。.xib
我将它加载到我的UIViewController
(不是UICollectionViewController
)子类中并将其返回到cellForItemAt
.
在我的UICollectionViewCell
(称为TagCell
)中,我这样做:
override
func
awakeFromNib()
{
super.awakeFromNib()
self.contentView.translatesAutoresizingMaskIntoConstraints = false
self.translatesAutoresizingMaskIntoConstraints = false
self.layer.borderColor = UIColor(red: 0.354, green: 0.442, blue: 0.297, alpha: 0.74).cgColor
self.layer.borderWidth = 1.0
self.layer.cornerRadius = 4.0
}
Nib 只有我放入的顶层UICollectionViewCell
,并且UILabel
所有四个边缘都具有固定的 4 像素约束。UILabel
我设置了in的文本cellForItemAt
。但是,生成的集合以我设置的估计高度的所有单元格呈现viewDidLoad()
:
override
func
viewDidLoad()
{
super.viewDidLoad()
let nib = UINib(nibName: "TagCell", bundle: Bundle(for: type(of: self)))
self.collectionView.register(nib, forCellWithReuseIdentifier: "TagCell")
let layout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
layout.estimatedItemSize = CGSize(width: 60.0, height: 25.0)
}
细胞笔尖文件:
这似乎是我在网上找到的 Apple 和其他资源告诉我要做的任何事情,但我一定错过了一些重要的事情。我还尝试在我的 UILabel 上将水平压缩阻力优先级设置为 1000,但它们一直被截断。
我也尝试过设置>=
宽度限制,但这似乎被忽略了。
在我设置之前self.contentView.translatesAutoresizingMaskIntoConstraints
,我会在调试器中收到冲突约束警告。但是现在它并没有抱怨>=
宽度限制,甚至认为它违反了它。
解决方案
因此,事实证明您必须在单元格中执行以下操作awakeFromNib()
:
self.contentView.translatesAutoresizingMaskIntoConstraints = false
let fixupConsts =
[
self.contentView.leftAnchor.constraint(equalTo: self.leftAnchor),
self.contentView.rightAnchor.constraint(equalTo: self.rightAnchor),
self.contentView.topAnchor.constraint(equalTo: self.topAnchor),
self.contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor)
]
NSLayoutConstraint.activate(fixupConsts)
尽管WWDC 2014 Session 226非常明确地指出您唯一需要做的就是将其设置estimatedCellSize
为非零值,但这还不够。
如果有人可以提供更好的答案,我很乐意将其标记为答案。
推荐阅读
- git - 克隆我的仓库的人可以从之前的提交中获取我的 api_key 吗?
- jquery - 在不同输入字段的搜索时使用 ajax 获取多数据 onclick 事件
- jenkins - Jenkins通过SSH构建,主机上的工件而不是工作区?
- javascript - 添加购物车的总成本
- tensorflow - 有什么方法可以修改可用的 TensorFlow 模型架构(例如 ssd 或 fast r-cnn),使其仅针对一个对象检测进行优化?
- flutter - 颤振相机选项
- reactjs - 无法运行 mlflow 独立反应服务器
- facebook - HTML 代码无效。如何使用谷歌标签管理器添加 facebook Messenger 代码?
- c# - 将项目从函数添加到 Listview
- libreoffice-basic - LibreOffice Basic 中的“base”关键字