0

我正在开发一个 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);
}
}
4

1 回答 1

0

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

  1. 像代码一样定位您的视图。它本身并没有什么坏处,但请注意它需要在 view's (not view controller's) 中完成layoutSubviews。您在视图布局其子视图之前设置的任何框架都将在此过程中通过自动布局重置。

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

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

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

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

于 2013-09-26T23:40:28.620 回答