使用乘数在 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 用于超级视图的比例乘数宽度?

UIStackView 中按钮的按比例调整大小

UITableviewCell 中的 UIStackview 按比例填充需要不正确的帧

如何使用 UIStackView 按比例调整大小?

iOS 11 UIStackView 填充按比例分布导致奇怪的视图加载动画

如何将间距约束指定为超级视图大小的比例?