以编程方式将约束添加到相对于同级的视图

Posted

技术标签:

【中文标题】以编程方式将约束添加到相对于同级的视图【英文标题】:Programmatically add constraint to view relative to a sibling 【发布时间】:2015-09-29 04:19:08 【问题描述】:

我正在使用自动布局。我有一个带有子视图(sb1)的视图。我正在以编程方式向该视图添加另一个子视图(sb2)。我正在向这个新的子视图添加约束。

我想要完成的事情:

在 sb1 下方添加 sb2 并将约束添加到 sb2 的顶部以将其固定到 sb1。

我尝试过的:

[self.containerView insertSubview:sb1
                     belowSubview:sb2];

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:sb1 
                     attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual 
                     toItem:sb2 attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.f];

[self.otherLeftView addConstraint:constraint];

发生的事情是我新添加的子视图被固定到容器视图的顶部,而不是 sb1(这是我想要发生的)。可视化正在发生的事情:

有谁知道如何在 SB1 和 SB2 之间添加约束?谢谢!

【问题讨论】:

您将它们的顶部限制为相等,而这正是您所得到的。 @JoshCaswell 那么如何添加垂直间距约束? null 的回答有一个大致的思路:将第二个的顶部约束到第一个的bottom 【参考方案1】:

试试这个:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:sb1 
                     attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual 
                     toItem:sb2 attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.f];

【讨论】:

以上是关于以编程方式将约束添加到相对于同级的视图的主要内容,如果未能解决你的问题,请参考以下文章

使用布局约束以编程方式将视图添加到滚动视图

以编程方式将自动布局约束添加到恒定宽度和高度的子视图

以编程方式添加的约束不起作用

未能尝试在 SWIFT 中以编程方式在滚动视图中添加 UIView 约束

将右对齐约束添加到以编程方式添加的子视图

NSLayout 约束失败