为 iPhone 创建单独的纵向和横向布局



我正在开发一个iPhone应用程序,我想为纵向视图和横向视图创建单独的布局。 在纵向布局中,我有 2 列和 3 行方形按钮(这是通过界面构建器中的 xib 完成的(。 在横向中,我希望有 3 列 2 行。 这可能吗? 我添加了以下我认为可能适用于此的代码。

- (void)willAnimateRotationToInterfaceOrientation:    
(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
    toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
    NSLog(@"Landscape Rotation Occurred");
    scriptureButton.frame = CGRectMake(20, 20, 130, 130);
    characterSketchButton.frame = CGRectMake(170, 20, 130, 130);
    mapButton.frame = CGRectMake(320, 20, 130, 130);
    storyingButton.frame = CGRectMake(20, 170, 130, 130);
    videoButton.frame = CGRectMake(170, 170, 130, 130);
    otherResourcesButton.frame = CGRectMake(320, 170, 130, 130);
}
else
{
    NSLog(@"Portrait Rotation Occurred");
    scriptureButton.frame = CGRectMake(20, 20, 130, 130);
    characterSketchButton.frame = CGRectMake(170, 20, 130, 130);
    mapButton.frame = CGRectMake(20, 170, 130, 130);
    storyingButton.frame = CGRectMake(170, 170, 130, 130);
    videoButton.frame = CGRectMake(20, 320, 130, 130);
    otherResourcesButton.frame = CGRectMake(170, 320, 130, 130);
}
}

通常有两种手动实现的方法——

  1. 像代码一样自行定位视图。它本身并没有什么不好的,但请注意,它需要在视图(而不是视图控制器(layoutSubviews中完成。在视图布局其子视图之前设置的任何框架都将在此过程中通过自动布局重置。

  2. 有两个控制器,例如纵向控制器在过渡时自动显示和关闭横向控制器。

由于您可以在第二种方法中像往常一样使用自动布局和界面构建器的所有细节进行建模,因此通常认为这是首选。

尽管您也可以使用 1 的变体,但如果由于某种原因双控制器解决方案不可接受,则不是直接更改框架,而是更改视图上的布局约束。

但是,从您的问题来看,实际上听起来您需要一个UICollectionView.设置单元格大小后,它将在视图控制器的边界更改期间根据需要重新定位其单元格。

最新更新