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

时间:2013-09-26 22:28:08

标签: iphone ios objective-c interface-builder

我正在开发iPhone应用程序,我想为纵向视图和横向视图创建单独的布局。在纵向布局中,我有2列,有3行方形按钮(这是通过界面构建​​器中的xib完成的)。在Landscape中我希望有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 个答案:

答案 0 :(得分:0)

通常有两种手动实现方法 -

  1. 自己定位视图,就像代码一样。关于它没有任何本质上的坏处,但请注意它需要在视图(而不是视图控制器)layoutSubviews中完成。您在查看之前设置的任何框架都会在autolayout中重置其子视图。

  2. 有两个控制器,例如肖像1在过渡时自动显示和关闭景观。

  3. 由于您可以使用autolayout和界面构建器的所有细节在第二种方法中照常建模,因此通常认为这是首选。

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

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