使用乘数在 UIStackView 内按比例设置视图 - 快速 - 以编程方式
Posted
技术标签:
【中文标题】使用乘数在 UIStackView 内按比例设置视图 - 快速 - 以编程方式【英文标题】:Proportionally set views inside UIStackView using multiplier - swift - programmatically 【发布时间】:2020-07-10 10:54:23 【问题描述】:我正在设置一个垂直的 stackView 填充整个容器视图。
在容器视图初始化程序中,我放置了这段代码,旨在为排列的子视图设置比例高度:
view1.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.2).isActive = true
view2.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.6).isActive = true
view3.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.2).isActive = true
let stackView = UIStackView(arrangedSubviews: [view1, view2, view3])
stackView.axis = .vertical
addSubview(stackView)
stackView.fillSuperview()
当我尝试运行时收到此错误:
Unable to activate constraint with anchors [...] because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'
【问题讨论】:
将您的 view1 view2 和 view3 放入一个容器中,现在就可以使用它们了。 如果您在 stackview 中添加视图,然后将约束应用于 stackview 而不是 self.heightAnchor 可能那就行了 【参考方案1】:首先添加排列好的子视图,然后激活与stackView
相关的约束。
let view1 = UIView()
let view2 = UIView()
let view3 = UIView()
view1.backgroundColor = .red
view2.backgroundColor = .blue
view3.backgroundColor = .green
let stackView = UIStackView(arrangedSubviews: [view1, view2, view3])
stackView.frame = CGRect(x: 0, y: 0, width: 40, height: 100)
stackView.axis = .vertical
view1.heightAnchor.constraint(equalTo: stackView.heightAnchor, multiplier: 0.2).isActive = true
view2.heightAnchor.constraint(equalTo: stackView.heightAnchor, multiplier: 0.6).isActive = true
view3.heightAnchor.constraint(equalTo: stackView.heightAnchor, multiplier: 0.2).isActive = true
【讨论】:
以上是关于使用乘数在 UIStackView 内按比例设置视图 - 快速 - 以编程方式的主要内容,如果未能解决你的问题,请参考以下文章
@IBDesignable , NSLayoutConstraint 用于超级视图的比例乘数宽度?
UITableviewCell 中的 UIStackview 按比例填充需要不正确的帧