2016-05-12 86 views
-1

UIView的動力高度在7.3的Xcode我有自動佈局以下設置: enter image description here在斯威夫特和Xcode中

當我按一下按鈕,我一個UILabel添加到紅色的UIView與addSubview()。我想要實現的是當組合標籤的大小超過紅色UIView時,自動調整紅色UIView和綠色UIView的大小。

我試圖計算所有標籤的大小,然後在didLayoutSubView()中設置frame.size.height的紅色視圖,這有點奏效,但後來我也遇到了麻煩,當時也對綠色UIView做了相同的處理,基於紅色UIView的。嵌套大量的UIViews也變得非常麻煩。必須有一些更好的方法來完成這一點? (沒有UIStackView)。

我也玩過不同的自動佈局設置,沒有運氣。獎金,如果這也可以添加到UIScrollView,並使其contentSize也自行調整!

所有這一切似乎應該是這樣一個微不足道的事情,所以我認爲我可以忽略一些小而容易的事情。任何有關如何使用Swift和/或Interface Builder來實現這一點的指導都將受到高度讚賞。

回答

1

當您使用addSubview()時,

  1. 您還需要限制該標籤,以便紅色視圖知道有人試圖擴展它。

  2. 正如我所看到的,您已經在IB中對正確的約束和紅色視圖進行了限制。對於綠色視圖,您只能對頂級視圖進行約束,領導和訓練,並讓它在底部展開,因此不存在約束,因此請將480限制爲不變。

現在,當您添加一個UILabel時,請務必以實用的方式限制它。

它很容易添加一個帶約束的UILabel(約束Top,Leading,Trailing和Bottom),但是當動態我們需要添加更多的時候,我們需要用限制來玩弄(去掉最後添加的標籤的底部常量,添加最後添加的垂直間距btw和新的,引導尾部和底部空間到容器)。

我們在項目中遇到過這樣的情況,所以我們最終在目標c中創建了UIView的子類。

NNVerticalStackView.h NNVerticalStackView.m

如果你打算iOS9用戶僅必須使用UIStackView在iOS9 API的推出。

+0

這對我來說非常有意義,我會在週末考慮一下,看看它是如何發展的。謝謝! –

0

在這種情況下,您可以使用UITableView

1)添加的UILabel的UITableViewCell

2)設置領先尾隨底部約束到的UILabel w.r.t. 內容視圖的的UITableViewCell

3)的UILabel的行數設置爲

4)最後,在viewDidLoad中()使用的下面幾行代碼:

tableView.estimatedRowHeight = 44 
tableView.rowHeight   = UITableViewAutomaticDimension