gpt4 book ai didi

ios - 编程约束

转载 作者:搜寻专家 更新时间:2023-11-01 06:31:25 25 4
gpt4 key购买 nike

我认为我这样做是正确的,在尝试激活约束之前将 addItemButton 添加到 self.view,但它抛出了这个错误:

'无法使用 anchor 激活约束,因为它们没有共同的祖先。约束或其 anchor 是否引用不同 View 层次结构中的项目?这是非法的。”

var addItemButton: UIButton{
let button = UIButton()
let dim: CGFloat = 64.0

button.frame = CGRect(x: 0, y: 0, width: dim, height: dim)
button.tintColor = Constants.color4
button.layer.cornerRadius = dim / 2
button.layer.masksToBounds = true

button.translatesAutoresizingMaskIntoConstraints = false

return button
}

extension MainViewController{
func setupView(){
view.addSubview(itemsCollectionView)

view.addSubview(addItemButton)
addItemButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
addItemButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
}

我认为 view.addSubView(addItemButton) 会创建必要的层次结构。

最佳答案

var addItemButton: UIButton { 是一个计算变量。每次访问它时,都会创建一个新的按钮实例,因此在

view.addSubview(addItemButton)
addItemButton.centerXAnchor. ...

每一行的 addItemButton 都是一个新对象。创建了一个按钮,然后您尝试向另一个完全不同的按钮添加约束。

您应该将变量转换为一个惰性变量,从闭包中初始化:

lazy var addItemButton: UIButton = {
let button = UIButton()
let dim: CGFloat = 64.0

button.frame = CGRect(x: 0, y: 0, width: dim, height: dim)
button.tintColor = Constants.color4
button.layer.cornerRadius = dim / 2
button.layer.masksToBounds = true

button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

关于ios - 编程约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46758088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com