首页 > 解决方案 > 如果我在代码中更改故事板单元格大小,是否需要设置 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?我会在代码中的哪个位置执行此操作?在单元格的自定义类中?

或者,错误的解决方案是别的吗?

谢谢。

标签: iosswiftuicollectionviewautoresizingmask

解决方案


我的问题的答案:

  1. 我必须设置translatesAutoresizingMaskIntoConstraits = false吗?是的。
  2. 我在哪里做?在自定义 CollectionViewCell 的代码中。

这就是我所做的。

  1. 从情节提要中删除原型单元并在代码中执行所有操作。

  2. 设置自定义单元格,如下所示:

class WWCollectionViewCell: UICollectionViewCell {

    override init(frame: CGRect) {
        super.init(frame: frame)
        translatesAutoresizingMaskIntoConstraints = false
    }

    required init?(coder: NSCoder) {
        fatalError("Init(coder) has not been implemented.")
    }

}
  1. 在管理ContainerView的ViewController中,在viewDidLoad()中注册cell
boardCollectionView.register(WWCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)

现在我的单元格针对不同的设备调整大小,并且始终具有 6x6 网格,单元格大小基于 ViewController 中的计算。


推荐阅读