我的应用程序使用故事板和自动布局。在视图控制器中,我创建了一个UIScrollView
并添加了三个子视图。滚动UIScrollView更改其子视图框架
在运行时,我需要更改子视图的大小并重新排列它们。最初,我重新排列它们在viewDidLayoutSubviews
,它似乎工作,直到我滚动滚动视图。然后将子视图框更改回在IB中设置的尺寸。 (我重新安排意见,并删除所有UIViewConstraints
时设置UIScrollView
的内容大小。)
我的应用程序使用故事板和自动布局。在视图控制器中,我创建了一个UIScrollView
并添加了三个子视图。滚动UIScrollView更改其子视图框架
在运行时,我需要更改子视图的大小并重新排列它们。最初,我重新排列它们在viewDidLayoutSubviews
,它似乎工作,直到我滚动滚动视图。然后将子视图框更改回在IB中设置的尺寸。 (我重新安排意见,并删除所有UIViewConstraints
时设置UIScrollView
的内容大小。)
框架和Auto Layout
不走在一起,如果你正在使用Auto Layout
你需要重新安排约束,而不是帧。使用Auto Layout
更改相框会导致一些奇怪的效果,并最终回到您在原始UIView
中创建的约束。
一些解决方案:
Auto Layout
。第一个解决方案工作,与IBOutlet几乎没有约束+很少限制帮助我做我需要什么,感谢您的快速答案。 –
我正在使用自动布局。并正常工作。我有一个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;
}
}
如果你需要改变帧运行。 yoiu将需要为该视图控制器禁用“自动布局” –