我有以下情況:忽略自動版式隱藏的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