我一直在嘗試通過學習自動佈局來改進我的佈局技巧,但是我偶然發現了一個我只是無法解決的問題。自動佈局tableHeaderView
下面是發生了什麼:有一個視圖控制器,其中包含一個UITableView
和一個UIView
。這個視圖放在表格視圖的正下方,它的高度不會延伸到全屏高度(假設它佔據了它的上半部分)。
表視圖使用分組風格並放置在提到的視圖上方,具有半透明背景,因此您可以在其下方看到視圖的內容。由於視圖佔用了一半的屏幕,我需要在這個表視圖中添加一個tableHeaderView(也是半透明的),以便在第一次加載視圖控制器時,整個背景內容清晰可見。
這樣做的最終效果就像固定的tableHeaderView在向上滾動表格視圖時消失在背景上。
這是用一個簡單的方法使用彈簧和支柱來完成的,但每次我嘗試向表格視圖添加標題時,Auto Layout都會崩潰應用程序(不管我怎麼做)。
因爲我正在尋找一種方式來始終與後臺(奧瑟維尤)與tableHeaderView高度的觀點高度,我使用的是:
[self.view addConstraint:[NSLayoutConstraints constraintWithItem:headerView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:otherView attribute:NSLayoutAttributeHeight multiplier: 1 constant:0]];
(這是我的理解是,約束可以「T被直接添加到表視圖,因爲奧瑟維尤不是它的一個子)
也:
[headerView setTranslatesAutoResizingMaskIntoConstraints:NO]
這些電話始終會導致此崩潰:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.'
那麼有沒有辦法做到這一點?是否有可能使用自動佈局將tableHeaderView高度綁定到視圖上的另一個元素?
我還應該注意到,我早就離開了IB,所以這一切都是在代碼中完成的,特別是在loadView
上。
大衛,感謝您的意見。我對addConstraints/addConstraint混淆不清。這是我原來的問題上的一個錯字。我修好了。無論如何,根據你的建議:每當我調用[self.view addConstraint:headerViewHeightConstraint]時,仍然會發生同樣的崩潰;不要緊,如果我在loadView,layoutSubviews或其他方法上執行它。看來,對我來說,表格視圖實際上是在向任何子視圖添加約束。 –
哦,你添加約束到tableView?那種感覺就像是一個不行。 –
是的,那也是我的猜想。因爲這個評論,我接受你的答案。到目前爲止,不幸的是,使用Auto Layout使用UITableView子視圖似乎是不可能的。感謝您的幫助,David。 –