编程约束在UICollectionViewCell Swift内部不起作用

时间:2019-02-06 09:39:56

标签: ios swift uicollectionview autolayout uicollectionviewcell

我试图在UICollectionViewCell内部进行程序化查看,我认为将“以编程方式查看的代码”放在UICollectionViewCell中是明智的。

这是我的代码:

override func awakeFromNib() {
        super.awakeFromNib()

        let view = UIView()
        view.frame = CGRect.zero
        view.backgroundColor = UIColor.black

        self.contentView.addSubview(view)
        self.contentView.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            view.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 0),
            view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: 0),
            view.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: 25),
            view.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 25),
            ])

        self.contentView.layoutIfNeeded()
    }

我想知道为什么自动布局不起作用,相反,如果我使用手动CGRect,则视图确实出现了。

3 个答案:

答案 0 :(得分:1)

  

此解决方案只需设置   view.translatesAutoresizingMaskIntoConstraints = false    不是contenView

override func awakeFromNib() {
    super.awakeFromNib()

    let view = UIView()
    view.frame = CGRect.zero
    view.backgroundColor = UIColor.black


    self.contentView.addSubview(view)
    view.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        view.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 0),
        view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: 0),
        view.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: 25),
        view.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 25),
        ])
}

答案 1 :(得分:1)

尝试更改 self.contentView.translatesAutoresizingMaskIntoConstraints = false 至: view.translatesAutoresizingMaskIntoConstraints = false

您想关闭translatesAutoresizingMaskIntoConstraints中的view,因为我们要对其应用autolayout

答案 2 :(得分:1)

首先:您不应调用layoutIfNeeded方法,更改规则(约束)后,自动布局循环将为您完成此操作

第二步:您应该为将要布局的视图将translatesAutoresizingMaskIntoConstraints属性设置为false,所以不要这样做

self.contentView.translatesAutoresizingMaskIntoConstraints = false

但是您应该这样做

view.translatesAutoresizingMaskIntoConstraints = false
  

这是因为自动调整大小的遮罩约束已通过您设置的约束应用于view。这可能并可能会导致约束破坏。

如果这没有帮助,则为控制台输出提供自动布局错误。