2015-11-22 88 views
4

聲明:我看到了一種SO技術,其中包括向UIScrollView添加UIView(被稱爲contentView)並將所有內容都放置到該contentView中。我不想使用這種技術,因爲我想瞭解爲什麼我有當前的問題。我有一個UIScrollView UIViewController的默認UIView,它的UIScrollView有4個約束:每一邊(尾隨,頂部,領先,底部),以便它粘到它的父母UIView。 This Works!在自動佈局中丟失約束x和高度到UIScrollView

Working UIScrollView constraints

但是,當我想一個的UIImageView添加到的UIScrollView,我希望它被粘到其父邊(後,頂部,導致)+特定的高度,現在我有一個問題。

Non working UIImageView constraints

它說:

Scroll View: Has ambiguous scrollable height 
Scroll View: Needs constraints for: X position or width 

回答

6

Xcode的原因引發的錯誤是因爲它不能在運行時計算UIScrollViewUIImageView框架。

當您爲與其超級視圖相關的UIScrollView添加約束時,它會告訴xcode繪製與其超級視圖一樣大的滾動視圖。但是,當您添加與UIScrollView大小相關的UIImageView的約束時,它會告訴xcode繪製與UIScrollView內容大小相同的圖像視圖。請注意0​​的大小和內容大小是兩碼事。

如果我們把它看作房子,滾動視圖大小基本上是窗口大小,它可以用來查看房屋內部的大小。內容大小是房子的大小。這就是滾動視圖的大小和內容大小之間沒有關係的原因。

您可以通過兩種方式解決問題,首先通過編程方式或使用IB設置滾動視圖內容大小。雖然,我不確定是否以編程方式設置會使警告消失。您可以按照答案here在IB中進行設置。第二種方法涉及爲您的UIImageView添加更多限制。通過添加底部約束和寬度約束,xcode可以計算UIScrollView內容大小,這將刪除此警告。

+1

謝謝!我嘗試了第一個選項(鏈接),它無法使警告消失:/將UIView(contentView)添加到scrollView並執行UIView中的所有操作的技巧似乎是最簡單的選項(如果添加東西進入視圖)。 – Kalzem

2

爲了解決這個問題,我做了以下事情: 1.插入一個滾動視圖。從各個方向給Superview約束 2.在Scrollview中,我添加了另一個UIView。然後,我也向Superview從所有方向向UIView添加了類似的約束。除此之外,我還給它垂直居中對齊和水平居中對齊。這消除了約束錯誤。

0

這對我有用。

執行下列操作在您的storyborad

  • 添加在您的滾動視圖放置在0,0高度的隱藏視圖。
  • 向隱藏視圖添加約束,top = 0,left = 0,right = 0,bottom = 0。
  • 在此隱藏視圖上添加約束條件,使其與滾動視圖水平居中。

這應該照顧scrollview抱怨x位置。