0

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

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

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

或者是其他东西?实现这一点的最佳方法是什么?谢谢。

4

3 回答 3

1

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

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

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

于 2013-07-25T23:50:54.353 回答
0

也许你想看看 UICollectionView。它可能对你有用。否则,您应该考虑使用自动布局。如果您使用两个 nib,则可以使用 UIViewControllers 方法,例如

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

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

于 2013-07-25T23:53:22.957 回答
0

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

于 2013-07-25T23:58:12.887 回答