使用两个具有不同优先级值的顶部约束

时间:2016-02-10 21:15:58

标签: ios objective-c xcode interface-builder constraints

我有一个非常微不足道的案子。 有一个容器(浅灰色)有一个HeaderLabel(lines = 0),边距为16px,View(蓝色)。

如果HeaderLabel有一些值,它应放在View上方。

enter image description here

否则,如果我们没有HeaderLabel的值,它就会消失,View会粘在Container的顶部。

enter image description here

我尝试使用各种优先级为HeaderLabel和Container(常量> = 0)创建两个View.Top约束。

enter image description here

如果没有文本值,则删除代码中的HeaderLabel

if (!text) {
    [headerLabel removeFromSuperview];
}

但似乎没有用。它只显示容器顶部和视图之间的差距

enter image description here

如何使用IB管理此案例?或者它应该通过另一种方式解决?

2 个答案:

答案 0 :(得分:0)

我建议使用此方法,这会使滚动条视图约束更大,以便滚动视图将覆盖标签和间隙。 首先,为约束创建一个IBOutlet。

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *NAME;

然后,将其与scrollView的垂直约束连接。

之后,检查标签值并将约束设置为0,值为nil。

if (!text){
    [UIView animateWithDuration:0.3 animation:^{
        self.NAME.constant = THE HEIGHT OF SCROLLVIEW + THE GAP;
    }]
}

答案 1 :(得分:0)

1个视图(viewLabel),带有前导,尾随&顶部到超级视图,底部到视图(蓝色视图)。

用于viewLabel中的标签设置,其中约束为leading,trailing,top&底部到superview并设置line = 0的标签号。 如果有的话设定值

label.text = @"Value";

设置

label.text = @"";

自动布局自动管理标签高度及其superView(viewLabel)和设置值[self.view layoutIfNeeded]