2014-01-25 98 views
1

所以這裏是我的問題,我有一個滾動視圖包含一些與該佈局相關的動態內容的子視圖。我想設置滾動視圖的內容精確的是子視圖的大小的總和。有沒有更好的方式來獲取內容

一句話rootview-> scrollview->一些子視圖與動態內容(比方說,一個mulitilines的UILabel)

所以這裏是我做過什麼:根據viewDidLayoutSubviews文檔

,這種方法是調用並不表示視圖子視圖的各個佈局已被調整。每個子視圖負責調整其自己的佈局。

所以,當這種方法發生時,我的UILabel沒有佈局。

然後在viewdidappear中我設置了contentSize,但是一個新問題是當我們切換到橫向時這個問題沒有激活,所以我在viewDidLayoutSubview和viewdidappear中都進行了設置。

我的問題是 1.有沒有更好的方法來做到這一點? 2.在哪裏正是當下根視圖的子視圖完成他們的subviewlayout,以及如何進入呢?

我使用ios7自動佈局和約束(子類似乎有點重),我已經試過setviewNeedLayout並且在viewwilllayoutsubviews中沒有任何工作。切換方向

這裏的時候

,並把在viewdidlayoutsubviews layoutifneeded會崩潰是一些代碼:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self adjustScrollViewContentSize]; 
} 

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    [self adjustScrollViewContentSize]; 
} 

- (void)adjustScrollViewContentSize 
{ 
    UIView *bottomUIView = [self getBottomUIView]; 
    CGRect superRect = [bottomUIView convertRect:bottomUIView.bounds toView:self.scrollView]; 
    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, superRect.origin.y + superRect.size.height); 
} 

回答

1

使用自動版式,你應該能夠添加約束,使得你不需要手動更新contentSize - scrollView將根據其內容的大小自行調整它。

關鍵是要確保您有內部約束將內部子視圖附加到滾動視圖的所有4個內部邊緣。例如,使用Visual格式語言:

  • 平鋪:|[myLabel]|
  • 垂直:V:|[myLabel]-[someOtherLabel]|

從本質上講,只要你有明確的限制通過您的子視圖連接左邊緣向右邊緣(和從上到下相同),那麼滾動視圖將從這些推斷其contentSize。

+0

我覺得這對我沒有用,我希望我的子視圖在scrollview的相對位置沒有相對於屏幕移動。 I – chliul

相關問題