我发现要让它按照您的意愿/期望工作通常需要一些努力。要考虑的事情是您用来进行轮换的回调,有 3 个,它们的用途略有不同
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
这可能是您要使用的那个,此时当您查询self.view.frame
(或任何用于获取超级帧的内容)时,它将返回旋转完成后该帧的值。它还考虑了自动调整大小,并在旋转发生之前为您提供了这一点(即尚无可见效果)。使用它来计算视图的所有新位置和大小并设置它们。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
这告诉您旋转即将发生,但仍返回当前方向的框架,用于隐藏/显示视图,但不适用于计算新位置!
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
一旦旋转完成就会调用它,它会返回新的尺寸和帧,但是如果您尝试在此处重新定位视图,它们看起来就像在旋转完成后它们正在四处跳动。
我还建议使用自动调整大小,因为这可能是一个真正的婊子。我有时会在代码和 xib 中设置自动调整大小,以确保没有有趣的事情!
如果矩形嵌套在视图控制器中,它们应该自动旋转(您可能知道我只是想以防万一)