2014-02-11 48 views
4

我的應用程序使用故事板和自動佈局。在視圖控制器中,我創建了一個UIScrollView並添加了三個子視圖。滾動UIScrollView更改其子視圖框架

在運行時,我需要更改子視圖的大小並重新排列它們。最初,我重新排列它們在viewDidLayoutSubviews,它似乎工作,直到我滾動滾動視圖。然後將子視圖框更改回在IB中設置的尺寸。 (我重新安排意見,並刪除所有UIViewConstraints時設置UIScrollView的內容大小。)

+0

如果你需要改變幀運行。 yoiu將需要爲該視圖控制器禁用「自動佈局」 –

回答

2

框架和Auto Layout不走在一起,如果你正在使用Auto Layout你需要重新安排約束,而不是幀。使用Auto Layout更改相框會導致一些奇怪的效果,並最終回到您在原始UIView中創建的約束。

一些解決方案:

  1. 您可以創建一個出口到每個約束就像你到一個視圖並在需要時改變其不變。
  2. 如果您正在使用xib,您可以在該特定xib中禁用Auto Layout
+1

第一個解決方案工作,與IBOutlet幾乎沒有約束+很少限制幫助我做我需要什麼,感謝您的快速答案。 –

0

我正在使用自動佈局。並正常工作。我有一個uiscrollview,它包含3-4個圖像。這取決於有多少圖像。當我嘗試全屏顯示當前圖像,我使用的是functioni希望works.its這樣的:

- (無效){growImg

if (self.growImgNeed) { 

    self.Scroller.frame=CGRectMake(0, 100, 320, 376); 
    CGRect ViewSize = Scroller.bounds; 
    for(int i=0;i< Scroller.subviews.count;i++){ 
     [[self.Scroller.subviews objectAtIndex:i] setSize:CGSizeMake(320, 376)]; 
     [[self.Scroller.subviews objectAtIndex:i] setFrame:ViewSize]; 
     ViewSize = CGRectOffset(ViewSize, Scroller.bounds.size.width, 0); 
     } 
    Scroller.contentSize = CGSizeMake((Scroller.subviews.count) * Scroller.bounds.size.width, Scroller.bounds.size.height); 
    self.growImgNeed=false; 
} 

else { 
    self.Scroller.frame=CGRectMake(80, 82, 160, 188); 
    CGRect ViewSize = Scroller.bounds; 
    for(int i=0;i< Scroller.subviews.count;i++){ 
     [[self.Scroller.subviews objectAtIndex:i] setSize:CGSizeMake(160, 188)]; 
     [[self.Scroller.subviews objectAtIndex:i] setFrame:ViewSize]; 
     ViewSize = CGRectOffset(ViewSize, Scroller.bounds.size.width, 0); 
    } 
    Scroller.contentSize = CGSizeMake((Scroller.subviews.count) * Scroller.bounds.size.width, Scroller.bounds.size.height); 
    self.growImgNeed=true; 

} 

}

相關問題