编程约束在 UICollectionViewCell 中不起作用 Swift

Programatically constraint doesn't work inside UICollectionViewCell Swift

我试图在 UICollectionViewCell 中创建一个编程视图,我认为将 "programatically view code" 放在 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,视图确实出现了。

This Solve it just needs to set view.translatesAutoresizingMaskIntoConstraints = false not The 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),
        ])
}

努力改变 self.contentView.translatesAutoresizingMaskIntoConstraints = false 到: view.translatesAutoresizingMaskIntoConstraints = false

您想要关闭 viewtranslatesAutoresizingMaskIntoConstraints,因为我们要对其应用 autolayout

首先:你不应该调用layoutIfNeeded方法,自动布局循环会在你改变规则(约束)后为你做这件事

其次:要布局的视图应该设置translatesAutoresizingMaskIntoConstraints属性到false,所以你不应该这样做这个

self.contentView.translatesAutoresizingMaskIntoConstraints = false

但你应该这样做

view.translatesAutoresizingMaskIntoConstraints = false

That's because autoresizing mask constraints are applied to your view with constraints that you've set. This may and probably will cause constraints break.

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