2014-02-11 58 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; 

} 

}

相关问题