如何向 StackView 的子视图内的视图添加约束

Posted

技术标签:

【中文标题】如何向 StackView 的子视图内的视图添加约束【英文标题】:How to add constraints to a view inside a subview of a StackView 【发布时间】:2020-01-20 14:59:34 【问题描述】:

在我的测试程序中有一个垂直堆栈视图,在它的第三个子视图(底部的绿色)中,我想在其中心添加一个红色矩形。我尝试锚定到centerXAnchorcenterXAnchor,但它不起作用。我怀疑这是因为绿色视图不使用 X 和 Y 锚点,因为它的大小和位置由垂直堆栈视图管理。在绿色视图中居中红色矩形的正确方法是什么?这是我的代码和截图:

class ViewController: UIViewController 
    @IBOutlet var greenView: UIView!

    override func viewDidLoad() 
        super.viewDidLoad()
        let testView = UIView(frame: CGRect(x: 0,y: 0,width: 50,height: 50))
        testView.backgroundColor = .red
        greenView.addSubview(testView)
        greenView.translatesAutoresizingMaskIntoConstraints = false

        testView.centerXAnchor.constraint(equalTo: greenView.centerXAnchor).isActive = true
        testView.centerYAnchor.constraint(equalTo: greenView.centerYAnchor).isActive = true
    

这是故事板。唯一的限制是第一个视图高度 = 第二个视图高度,绿色视图高度 = 0.8 StackView 高度:

这是结果:

【问题讨论】:

【参考方案1】:

这个错误的罪魁祸首是greenView.translatesAutoresizingMaskIntoConstraints = false 我正在做的是使用 Anchor api 设置宽度、高度

let testView = UIView(frame: CGRect(x: 0,y: 0,width: 0,height: 0))
        testView.backgroundColor = .white
        greenView.addSubview(testView)
        testView.translatesAutoresizingMaskIntoConstraints = false

        testView.centerXAnchor.constraint(equalTo: greenView.centerXAnchor).isActive = true
        testView.widthAnchor.constraint(equalToConstant: 50).isActive = true
        testView.heightAnchor.constraint(equalToConstant: 100).isActive = true
        testView.centerYAnchor.constraint(equalTo: greenView.centerYAnchor).isActive = true

【讨论】:

以上是关于如何向 StackView 的子视图内的视图添加约束的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中调整 UIStackView 的子视图大小?

如何为堆栈视图中的视图添加约束

如何在 StackView 内的两个视图之间进行动画处理?

collectionview 或 uitableview 内的 Stackview

stackview 动画 - 排列的子视图的折叠

如何在 UIStackView 内排列的子视图上设置自定义高度?