2014-12-06 53 views
4

當我使用UIScrollView時,我遇到了一個奇怪的AutoLayout相關問題(如果沒有它,問題不會發生)。我有一個UIScrollView被限制在一個UIView的邊界(包含在一個UIViewController中),並且在這個內部,我試圖並排放置一個UILabel和UITextField。我已經制約的UILabel的左側和上部邊界,它的寬度和高度的限制(見下面的截圖):UIScrollView導致「放錯位置的視圖」AutoLayout問題

Properly functioning constraints for the UILabel

緊挨着這個的UILabel是一個的UITextField,它被限制在左,上,和正確的,以及有高度限制。然而,這導致「錯位意見」的警告,指出「預期寬度= 163,實際寬度= 413」,下面的截圖所示:

UITextField constraints causing Misplaced Views issue

當我選擇「重置爲建議的約束「,」放錯位置的視圖「問題消失了,但在它的位置我留下了413點的寬度限制,這是我希望避免的,因爲我不希望UIViewController在較小的設備上水平滾動。

回答

9

滾動視圖具有大小(其在屏幕上佔用的大小)和內容大小(整個可滾動區域的大小)。在自動佈局中,內容大小是根據滾動視圖中項目的約束自動計算的。這是一個問題,因爲您試圖使滾動視圖具有與屏幕相同的寬度,然後將項目限制爲該項目。當你這樣做時,自動佈局堅持要給你的文本字段一個明確的寬度,以便它可以計算你的可滾動區域的寬度。

做你想做什麼,做到以下幾點:

  1. 添加一個「內容視圖」來滾動視圖。此視圖將成爲您滾動視圖中唯一的頂級項目。它將把你的所有內容作爲它的子視圖。拖出UIView並將其添加到您的滾動視圖。將其頂部,前導,底部和尾部邊緣限制在滾動視圖中。將其寬度限制爲滾動視圖的寬度。給它一個高度限制,並將其設置得很大,你想要你的內容區域。

  2. 將所有標籤和文本框添加到此內容視圖。現在,您可以將它們限制在內容視圖中,或者限制在邊緣上,並且可以按照您的需要進行操作。