【问题标题】: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("%@", ...)
  • 是的,我是手动输入的,所以与此无关,我会解决的,谢谢;)

标签: ios objective-c cocoa-touch uiview uikit


【解决方案1】:

你需要设置滚动视图的框架而不是它的边界

scrollView.frame = mainView.bounds;

或者更好的是,如果您设置了正确的自动调整大小掩码/约束,它将自动调整大小。

【讨论】:

  • 谢谢,修复了一些问题,但不是所有问题。我已将背景中的 UIView 设为灰色,以便我可以看到它何时在后台弹出,并使用您的代码使其从不显示灰色,这很好。但是,当我放大滚动视图时,似乎有一个截止点。但是在写这篇文章时,我意识到可能是滚动视图的内容没有更新边界..?无论如何,至于 autorezise/constraints,我可以对以编程方式创建的 ScrollView 执行此操作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多