AutoLayout上可选择两个以上的项目

时间:2017-07-24 05:15:00

标签: ios objective-c autolayout

我有四个标签项目(小计,税金,小费和促销),其设计如下。

每个项目相互连接。换句话说,每个标签都使用顶部空间约束。

PromotionTip是可选的。如果用户想要添加,那么他可以。因此,我还在初始状态为每个标签项“Height == 0添加了约束。如果添加了其中任何一个,则我将Height更改为25以使其可见。

但是,您可以查看是否没有tip,那么promotion位置很奇怪。 我期望在税收下看到促销,而不是看到额外的空白。

我想知道开发人员通常如何处理这个问题?

添加提示之前 enter image description here

添加提示后

enter image description here

5 个答案:

答案 0 :(得分:1)

原因是因为提示标签的topbottom在未隐藏时具有相同的空间,并通过将其设置为height = 0来隐藏它,它仍然具有topbottom约束构成了巨大的空间。您将top的{​​{1}}约束设置为Tip Label和/或如上所述使用0,如果隐藏了一个项目,则会自动调整间距。

答案 1 :(得分:1)

更新Height标签的Tip约束时。同时更新top vertical space标签的Promotion

设置Promotion标签top vertical space = 0.0

示例:

@interface ViewController () {
    __weak IBOutlet NSLayoutConstraint *tipLabelHeight;
    __weak IBOutlet NSLayoutConstraint *promotionLabelTopVerticalSpace;
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    tipLabelHeight.constant = 0.0;
    promotionLabelTopVerticalSpace.constant = 0.0;
    [self.view layoutIfNeeded];
}

根据您的需要更改代码。

答案 2 :(得分:1)

当您通过将标签的高度设置为0来隐藏标签时,顶部和底部空间仍然存在。因此,当您尝试通过将标签的高度设置为0来隐藏标签时,您也应该删除该标签的顶部间距。在这种情况下,您应将“提示”标签的顶部空间设置为0,并将高度设置为0.因此,“促销”标签将取代“提示”标签

答案 3 :(得分:0)

您可以使用UIStackView而不是手动操作约束,堆栈视图自动管理它们,非常适合添加和删除以线性方式布局的子视图。

答案 4 :(得分:0)

认为这是因为这种显示应该在表格中完成。 然后该表将相应地分配间距。