我有以下情况:忽略自动版式隐藏的UILabel
- 我使用的自动布局
- 我有一个
UITableViewCell
,其中包含的信息,文本UILabel
。下面这UILabel
是像uilabel
“价格变化”其他用户界面元素(见第二画面)和其它元件等的按钮(图中未示出) - 由于信息文本
uilabel
是高度动态的,元件下方是根据信息文本标签的高度垂直向下移动。 - 在第一张图片中,您可以看到一条水平线。如果信息标签的高度增长,这条水平线会垂直向下移动。 “价格变化”标签根据此水平线的位置垂直对齐。
这工作正常。如果信息文本增长,其他元素按照希望向下移动。
现在我的问题:有时信息标签和水平分隔符需要被隐藏,因为没有信息文本。不幸的是,uilabel下的元素仍然被标签的高度向下移动,虽然它是隐藏的。看到我的照片的右侧。元素应该向上移动红色竖线标记的量。
如何告诉元素“价格变化”等等,如果信息标签和“需求”标签被隐藏,它应该向上移动。
更新:
我现在加了两个NSLayoutContstraints我的代码,并在故事板它们连接到创建的约束(看一看第三画面)
好的,这里有一个解释:我有两个NSLayoutConstraints 1rst:horizontalSeparatorContstraint将“Price Changes in”标签与第一个水平分隔符UIImage视图。我将该值设置为4个单位,以便如果隐藏“需求”和“特殊请求标签”,则此约束应该生效,并且“价格变化在”标签向上移动。 第二个约束:requiresLabelContstraint - 这个描述了第二个水平UIImageView和“Price changes in”标签之间的空间。差距应该是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的意图或理解是,通过改变优先级,我可以在它们之间切换。但这似乎并非如此。
那么我该如何解决我的问题。
谢谢你的答案。我更新了我的问题。 – toom 2013-03-15 18:14:20