滚动UIScrollView会更改其子视图帧

时间:2014-02-11 06:18:32

标签: ios cocoa-touch uiscrollview autolayout

我的应用使用了故事板和自动布局。在视图控制器中,我创建了一个UIScrollView并添加了三个子视图。

在运行时,我需要更改子视图的大小并重新排列它们。最初,我在viewDidLayoutSubviews重新排列它们,它似乎工作,直到我滚动滚动视图。然后将子视图帧改变回IB中设置的大小。 (我在重新排列视图并删除所有UIScrollView时设置了UIViewConstraints的内容大小。)

2 个答案:

答案 0 :(得分:2)

框架与Auto Layout不在一起,如果您使用Auto Layout,则需要重新排列约束,而不是框架。使用Auto Layout时更改帧会导致一些奇怪的效果,并最终会恢复为您在原始UIView中创建的约束。

一些解决方案:

  1. 您可以像对待视图一样为每个约束创建一个出口,并在需要时更改其常量。
  2. 如果您使用的是xib,则可以在该特定xib中禁用Auto Layout

答案 1 :(得分:0)

我正在使用自动布局。并且正常工作。我有一个uiscrollview,它包含3-4张图片。这取决于有多少图像。当我尝试制作全屏当前图像时,我正在使用功能,希望它有效。就像这样:

- (void)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;

}

}