当设备旋转时,如何为视图设置正确的边界?

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 执行此操作吗?

以上是关于当设备旋转时,如何为视图设置正确的边界?的主要内容,如果未能解决你的问题,请参考以下文章

在大小更改时使集合视图布局无效的正确方法

Flutter:如何为 Draggable 小部件设置边界?

如何为谷歌地图信息窗口设置边界半径

如何为 js 变量设置最小和最大边界?

旋转放置和移动视图 (UIView)

在 iOS 中旋转设备时,Webview 内容设置不正确