2

这让我有点困惑。我知道 UIScreen 中关于尺寸屏幕的 2 个属性,例如在这个问题中使用applicationFrame,而这使用bounds

  • applicationFrame - 显示设备的大小减去状态栏。在 iPhone 中制作 NSLog,我得到以下值: (x=0, y=20, height= 460, width = 320)
  • bounds - 显示所有尺寸的屏幕。值为: (x=0, y=0, height=480, width=320)

现在,如果我旋转设备(从肖像到 ladscape),这将显示(边界将是相同的值)

  • 转到函数:shouldAutorotateToInterfaceOrientation: x= 0 y=20 height= 460 width= 320
  • 返回 YES 所以
  • 转到函数:didRotateFromInterfaceOrientation: x= 20 y=0 高度= 480 宽度= 300
  • 我不知道为什么,但这在shouldAutorotateToInterfaceOrientation中再传递一次并显示: x= 20 y=0 height= 480 width= 300 (这是一个错误吗?)

我想将我的视图调整为这个新大小,但是如果我得到 CGRect,它将在 didRotateFromInterfaceOrientation 中给出正确的大小,并且高度将为宽度,反之亦然。

有没有一种好方法可以在不手动设置此值的情况下漂亮地调整我的视图大小?

4

1 回答 1

1

(假设这一点是从横向旋转回纵向)

我不知道为什么,但这在 shouldAutorotateToInterfaceOrientation 中再传递一次并显示: x= 20 y=0 height= 480 width= 300 (这是一个错误吗?)

它不是一个错误!

在 UI 旋转以匹配设备的方向之前调用 shouldAutorotateToInterfaceOrientation。因此,在第一种情况下(纵向到横向),它为您提供纵向的矩形。在第二种情况下(横向到纵向),它为您提供横向方向的矩形。

底线:
shouldAutorotateToInterfaceOrientation在启动 UI 旋转 之前给出 CGRect 值 didRotateFromInterfaceOrientation 在完成 UI 旋转后给出 CGRect 值

我建议你查看UIView 的autoresizesSubviews 和 autoresizingMask属性。当您使用必须旋转/调整大小的视图时,这可以省去很多麻烦。

希望我已经回答了您的问题,并且您觉得这很有用!

于 2011-07-02T18:11:48.590 回答