当设备旋转时,如何为视图设置正确的边界?
Posted
技术标签:
【中文标题】当设备旋转时,如何为视图设置正确的边界?【英文标题】:How can I set the correct bounds to a view when the device rotates? 【发布时间】:2013-01-13 22:25:24 【问题描述】:我有一个以编程方式创建的 UIScrollView,我将它创建为它后面的 UIView 的大小。在viewDidAppear
我基本上有:
UIScrollView *scrollView= [[UIScrollView alloc] initWithFrame:mainView.bounds];
//mainView being the UIView behind
当设备旋转时,背景中的 UIView 自然会改变边界,变宽变短(尽管 x,y ≠ y,x)。
在我的-(void)didRotateFromInterfaceOrientation:
中,我输入了`NSLog(@"%@", NSStringFromCGRect(mainView.bounds));,主视图的边界已经切换,但如果我这样做:
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
scrollView.bounds = mainView.bounds;
NSLog(@"%@", NSStringFromCGRect(scrollView.bounds));
NSLog(@"%@", NSStringFromCGRect(mainView.bounds));
它仍然显示错误..
NSLog 为两个视图记录了相同的边界,但是在屏幕上 mainView 是正确的,并且 scrollView 似乎翻转了,好像 (0,0) 的原点在 mainView 之外,并且大小翻转错误..
我是否必须重绘某些东西,还是我在错误的地方调用了所有这些?或者.bounds
不是正确的变量吗?
编辑
我意识到更新框架与使用 initWithFrame:
重新启动框架不同,但我希望当前内容以相同的方式保持不变..
【问题讨论】:
这是您的实际代码还是可能存在复制/粘贴错误?因为它应该是NSLog(@"%@", ...)
,而不是NSLog("%@", ...)
。
是的,我是手动输入的,所以与此无关,我会解决的,谢谢;)
【参考方案1】:
你需要设置滚动视图的框架而不是它的边界
scrollView.frame = mainView.bounds;
或者更好的是,如果您设置了正确的自动调整大小掩码/约束,它将自动调整大小。
【讨论】:
谢谢,修复了一些问题,但不是所有问题。我已将背景中的 UIView 设为灰色,以便我可以看到它何时在后台弹出,并使用您的代码使其从不显示灰色,这很好。但是,当我放大滚动视图时,似乎有一个截止点。但是在写这篇文章时,我意识到可能是滚动视图的内容没有更新边界..?无论如何,至于 autorezise/constraints,我可以对以编程方式创建的 ScrollView 执行此操作吗?以上是关于当设备旋转时,如何为视图设置正确的边界?的主要内容,如果未能解决你的问题,请参考以下文章