我有以下情况:
- 我正在使用自动布局
- 我有一个
UITableViewCell
包含UILabel
信息文本的。下面UILabel
是其他 UI 元素,如uilabel
“价格变化”(见第二张图片)和其他元素,如按钮(图中未显示) - 由于信息文本
uilabel
的高度是动态的,因此下方的元素会根据信息文本标签的高度垂直向下移动。 - 在第一张图片中,您可以看到一条水平线。如果信息标签的高度增加,这条水平线会垂直向下移动。“价格变化”标签根据这条水平线的位置垂直对齐。
这工作正常。如果信息文本增长,则其他元素会根据需要向下移动。
现在我的问题:有时信息标签和水平分隔符需要隐藏,因为没有信息文本。不幸的是,uilabel 下的元素仍然被标签的高度向下移动,尽管它是隐藏的。请看我图片的右侧。元素应向上移动红色竖线标记的量。
如果信息标签和“需求”标签被隐藏,我如何告诉元素“价格变化”等应该向上移动。
更新:
我现在在我的代码中添加了两个 NSLayoutContstraints 并将它们连接到情节提要中创建的约束(请看第三张图片)
好的,这里有一个解释:我得到了两个 NSLayoutConstraints 第一个:horizontalSeparatorConstraint 将“Price Changes in”标签与第一个水平分隔符 UIImageView 连接起来。我将该值设置为 4 个单位,这样如果隐藏了“需求”和“特殊请求标签”,则此约束应该生效,并且“价格变化”标签会向上移动。第二个约束: requirementsLabelConststraint - 这个约束描述了第二个水平 UIImageView 和“价格变化”标签之间的不理想空间。间隙应为 4 个单位。如果特殊请求文本可用,则此约束应该是“活跃的”。
这是一些新代码:
if( tour.specialRequests.length > 0 ) {
[demandsLabelContstraint setPriority:UILayoutPriorityDefaultHigh];
[horizontalSeparatorContstraint setPriority:UILayoutPriorityDefaultLow];
self.demandsLeftLabel.text = NSLocalizedString(@"GenericTour_Demands", @"");
self.demandsRightLabel.text = tour.specialRequests;
demandsLeftLabel.hidden = NO;
demandsRightLabel.hidden = NO;
horizontalSeparator.hidden = NO;
} else {
[demandsLabelContstraint setPriority:UILayoutPriorityDefaultLow];
[horizontalSeparatorContstraint setPriority:UILayoutPriorityDefaultHigh];
horizontalSeparator.hidden = YES;
demandsRightLabel.hidden = YES;
demandsLeftLabel.hidden = YES;
}
从代码中可以看出:我的想法是针对每种情况切换优先级。如果特殊请求文本可用,则通过设置优先级触发相应的 NSLayoutContraints。
我对 Autolayout 的意图或理解是,通过更改优先级,我可以在它们之间切换。但情况似乎并非如此。
那么我应该如何解决我的问题。