ios - 如果我在代码中更改故事板单元格大小,是否需要设置 translatesAutoresizingMaskIntoConstraints = false?如果,那么,在哪里?
问题描述
我正在开发一款适用于 iPad 的游戏,该游戏使用 6 x 6 网格相同大小的单元格,使用 UICollectionView 来布局和填充单元格。我的布局正常工作,但Unable to simultaneously satisfy constraints ... If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints
在所有单元格上都出现错误。
问题似乎是故事板中单元格的大小与我在代码中计算的单元格大小之间的差异。(我的计算是根据框架的大小和需要6行6列的,不是单元格内容驱动的。)
(为了使布局正常工作并识别重新计算的大小,我需要将 collectionView 的估计单元格大小设置为无。自动或任何值会导致使用情节提要单元格的大小而不是计算的大小。)
translatesAutoresizingMaskIntoConstraints = false
如果在代码中创建视图,我在很多地方都读到了需要设置的内容。在这里,视图来自情节提要,但我在代码中计算了它的大小。那么这是否意味着我需要将其设置为 false?我会在代码中的哪个位置执行此操作?在单元格的自定义类中?
或者,错误的解决方案是别的吗?
谢谢。
解决方案
我的问题的答案:
- 我必须设置
translatesAutoresizingMaskIntoConstraits = false
吗?是的。 - 我在哪里做?在自定义 CollectionViewCell 的代码中。
这就是我所做的。
从情节提要中删除原型单元并在代码中执行所有操作。
设置自定义单元格,如下所示:
class WWCollectionViewCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
translatesAutoresizingMaskIntoConstraints = false
}
required init?(coder: NSCoder) {
fatalError("Init(coder) has not been implemented.")
}
}
- 在管理ContainerView的ViewController中,在viewDidLoad()中注册cell
boardCollectionView.register(WWCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
现在我的单元格针对不同的设备调整大小,并且始终具有 6x6 网格,单元格大小基于 ViewController 中的计算。
推荐阅读
- node.js - CLI 无服务器部署期间 Google Chrome 选项卡崩溃
- flutter - 在选择时显示小部件并在取消选择颤振时隐藏
- flutter - 如何根据字符串长度确定 Container 的宽度?
- mysql - 无法访问已处置的对象 mysql 工作台
- docker - 我可以将 .Net 应用程序从 Linux 部署到 IIS 吗?
- sql - 选择查询以使用当前年份数据以降序获取去年月份
- vuejs2 - 如何显示json数组中的所有元素
- php - 警告:sqlsrv_fetch_array() 期望参数 1 是资源,bool 给定
- c - C、正确使用枚举、联合和函数返回
- c# - RequestStateChange 方法调用引发异常