设置自定义UICollectionViewCell.contentview.translatesAutoresizingMaskIntoConstraints = false后,autolayout不起作用

时间:2018-02-25 12:05:29

标签: swift uicollectionview autolayout uicollectionviewcell

  1. 我在故事板中制作了一个自定义的集合视图单元格。
  2. 我在collectionview单元格中添加了一个按钮,并将autolayout(0,0,0,0)设置为单元格。
  3. 我制作了一个自定义的collectionviewcell类。在本课程中,我设置了cell的contentview.translatesAutoresizingMaskIntoConstraints = false
  4. 按钮的自动布局无效!

    class SomeCell: UICollectionViewCell {    
       override init(frame: CGRect) {
         super.init(frame: frame)
         self.setup()
       }
    
    
       required init?(coder aDecoder: NSCoder) {
         super.init(coder: aDecoder)
         self.setup()
       }
    
       func setup() {
         self.contentView.translatesAutoresizingMaskIntoConstraints = false
       }
    
    }
    
  5. code of ViewController

    layout in StoryBoard

    Simulator: Button's autolayout is missed

2 个答案:

答案 0 :(得分:0)

我在运行时查看了所有约束,并在translatesAutoresizingMaskIntoConstraints设置为false和true时进行了比较。
结果是当translatesAutoresizingMaskIntoConstraints设置为false时,单元格的内容视图未获得其高度和宽度自动布局约束。在您的情况下,这会导致ambiguous layout
至于为什么会这样,我猜测UICollectionFlowLayout的实现依赖于该属性被设置为true,但我找不到任何关于此的文档。

答案 1 :(得分:-1)

您需要通过覆盖方法collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize为代理中的单元格提供大小 https://developer.apple.com/documentation/uikit/uicollectionviewdelegateflowlayout/1617708-collectionview

UICollectionView高度基于精确的帧计算,因此您的约束会遇到麻烦。你可以在单元格中设置约束,但是你需要为单元格提供一个大小,与UITableView不同。