2015-06-15 39 views
0

原諒我,如果這已經回答了其他地方,但我無法找到有關此主題:如何設置一個UITextView在一個UIScrollView與自動版式

我有一個VC與以下層次:

enter image description here

我希望我的ContentView元素在我的ScrollView中滾動。我在textView中有很多定義,有些比其他更長。以前,只有較長的定義會滾動,較短的定義不會滾動,但由於我有自動佈局衝突,所以鏈接無法在最後點擊。我將ScrollView限制爲視圖,將ContentView限制爲ScrollView。我也有來自主視圖的ContentView約束equalWidth和equalHeight。爲了使這個解決方案起作用,我必須將ContentView的高度設置爲1000磅,這樣更長的定義不會被截斷。唯一的問題是,現在所有的定義都是滾動的(即使不需要,也沒有足夠的文本可以通過屏幕)。用戶可以向下滾動並看到足夠的空白來覆蓋屏幕,具體取決於定義的簡短程度。

我的問題是:如何安排約束條件,以便在需要時滾動更長的定義,而較短的定義則不會 - 我如何動態設置約束?

感謝

回答

0

如果我理解正確你,這聽起來像您有您設置滾動視圖的內容,這樣,當它應該會滾動,而不是滾動的時候它不應該的問題。正確?然後(假設你的約束設置正確),你的scrollView的contentSize應該由autoLayout根據你的內容視圖的大小來設置。

嘗試設置屬性以動態控制內容視圖的高度。在您的視圖控制器,創建你的財產:

@property (nonatomic, strong) IBOutlet NSLayoutConstraint *contentViewHeight; 

然後,無論你正在設置您的標籤的文字,你應該計算出一個新的高度,並更新基於你的約束。 For reference, here is a question regarding how to determine the height of text in a label.

一旦你的高度,你可以設置它是這樣的:

self.contentViewHieight.constant = // Updated Height 
[self.view setNeedsUpdateConstraints]; 

我希望幫助。根據我自己的經驗,自從它更新爲使用AutoLayout以來,我一直限制使用UIScrollView。我主要使用UITableView & UICollectionView。

+0

謝謝,阿隆。是的,這正是我所想的; contentSize的動態調整大小。你說:「假設你的約束設置正確,你的scrollView的contentSize應該由自動佈局設置......」我很確定所有東西都正確連線(沒有自動佈局問題),並且它在所有設備上正確調整大小。是否應該在沒有顯式屬性的情況下調整大小?手動調整每個文本視圖的大小並不是真正的解決方案。 – jdlace

+0

@jdlace我不是說你應該動態調整每個textView的大小。您只需要獲取contentView中所有內容的高度,並在其上設置高度限制。然而,現在我已經考慮了更多,它應該比這更簡單:您不應該將contentView的大小限制在視圖中。相反,你應該限制底部和尾部空間到你的scrollView中的LAST元素。如果內容視圖中的所有內容都被正確約束,那麼當textView的大小增長時,應該包含視圖的整體大小。 –

+0

謝謝阿隆。目前,這些是我的約束:ScrollView(頂部,底部,前導,尾隨)到MainView。 ContentView(頂部,底部,前導,尾部)到ScrollView和equalWidth到MainView。然後,對於ContentView中的textView,我有(頂部,底部,頂部,尾部)。然後我使用self.textViewHeightConstraint.constant = [self.sourceInformation sizeThatFits:CGSizeMake(self.sourceInformation.frame.size.width,CGFLOAT_MAX)]。height設置高度約束屬性。到目前爲止,我的結果好壞參半。絕對根據文字動態調整大小,但仍不是100%。思考? – jdlace

相關問題