如何在iPad自动旋转期间重新排列视图

时间:2013-07-25 23:30:16

标签: iphone ios objective-c ipad

视图控制器有六个矩形视图。在横向模式下,我想将它们排列为3列和2行。但在纵向模式下,我想将它们排列成2列和3行。

当iPad在横向和纵向之间旋转时,如何实现它?

我是否需要有两个nib文件:一个用于3列和2行的横向,另一个用于2列和3行的肖像,并在自动旋转期间交换它们?

还是其他什么?实现这个的最佳方法是什么?感谢。

3 个答案:

答案 0 :(得分:1)

您只需要1个nib文件。为您的列/行创建IBOutlets,然后手动设置它们:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

您还需要确保在viewWillAppear中调用willRotateToInterfaceOrientation,以确保在横向模式下输入视图时正确设置了列/行的初始位置。

答案 1 :(得分:0)

也许你想看一下UICollectionView。它可能适合你。否则,您应该查看使用autolayout。如果使用两个笔尖,则可以使用UIViewControllers方法,例如

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;

或者,在设备旋转时调用layoutSubviews,您可以在那里执行任何操作。 我认为如果差异相当小,那么你就不需要使用两个不同的Nib了。

答案 2 :(得分:0)

您可以使用2个xib执行此操作,或者如果您正在使用布局约束,则可以在纵向模式下设置(在IB中),然后在代码中将这些约束保存到viewDidLoad中的数组。在willAnimateRotationToInterfaceOrientation:duration:方法中,为横向方向创建新约束并将其添加到superview。查看我对这个问题的回答,UIView to Ignore Orientation or Stick-To-Bottom Container,了解我是如何做到这一点的。