2014-10-28 40 views
6

我有UILabelUIScrollView我試圖換行。我想使用AutoLayout進行佈局配置。當它不在UIScrollView內時,UILabel字完美包裝。我只需要將行數設置爲0並將換行符模式設置爲換行。UILabel不會自動換行UIScrollView與AutoLayout

但是,當我將UILabel放在UIScrollView的內部時,換行停止工作。我已經檢查過「Dynamic UILabel height inside UIScrollView with AutoLayout」和「Correctly Size UILabel inside UIScrollView using Interface Builder and Autolayout?」,但這些問題都沒有幫助我的答案。

我有set up a test project說明如果有人想看看我正在談論什麼。

+0

其實你所引用的問題的答案正是你所需要的。問題是你沒有聽他們告訴你的。 – matt 2014-10-28 13:49:38

回答

10

原因是滾動視圖中的約束固定在滾動視圖上,並不意味着你認爲它們的含義。他們必須從內向外確定滾動視圖的contentSize;他們沒有本身確定的從外到內滾動視圖中的大小事情在這裏見我的回答:https://stackoverflow.com/a/13548039/341994

你的情況,最簡單的解決方法是使用一箇中間內容視圖,讓你有這樣的層次結構:

scroll view 
    content view 
     label 

現在給內容視圖絕對的寬度和高度約束,並將它固定在滾動視圖的所有四邊。 現在該標籤將按照您的預期工作。內容視圖具有足夠的限制,既可以絕對地設置其自己的大小,也可以從內部約束滾動視圖的contentSize。同時,標籤上的約束不是滾動視圖,而是內容視圖,並且由於內容視圖具有固定大小並且是普通視圖(而不是滾動視圖),因此標籤上的約束符合您的期望。

+0

如果你仔細看看你發佈的項目,你會發現Xcode實際上是在告訴你這一點。滾動視圖的佈局結構存在警告。那警告實際上告訴你我在這裏告訴你的同樣的事情。不要忽略Xcode中的自動佈局警告!他們是_mean_的東西。 – matt 2014-10-28 13:48:08

+0

非常感謝您的回答,它幫助我瞭解發生了什麼。但是,你說的是什麼內容視圖?容器視圖? – 2014-10-28 13:52:02

+0

這是一個普通的香草UIView,其目的是做我剛剛描述的 - 作爲一箇中間視圖,以便設置contentSize,並且內部約束將起作用。 – matt 2014-10-28 14:28:27

6

我有同樣的問題,但能夠得到的UILabel由標籤

  • 前導空格上設置以下約束正確地換到上海華
  • 尾隨空間,以上海華
  • 平等Width to Superview **(這是限制標籤上的寬度以便正確包裝的寬度)

您還必須具有從頂部到底部的約束om滾動視圖。例如,如果您只有標籤,則必須將頂部空間和底部空間設置爲Superview。如果你不這樣做,它會有一個模糊的可滾動內容高度。

要防止滾動視圖的水平滾動,請選中「方向鎖定已啓用」並在scrollViewDidScroll方法內正確調用setContentOffset(有關詳細信息,請參閱this問題的第一個答案)。

1

嘗試使用UILabel'spreferredMaxLayoutWidth並將其設置爲父視圖的寬度。