我正在开发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);
}
}
答案 0 :(得分:0)
通常有两种手动实现方法 -
自己定位视图,就像代码一样。关于它没有任何本质上的坏处,但请注意它需要在视图(而不是视图控制器)layoutSubviews
中完成。您在查看之前设置的任何框架都会在autolayout中重置其子视图。
有两个控制器,例如肖像1在过渡时自动显示和关闭景观。
由于您可以使用autolayout和界面构建器的所有细节在第二种方法中照常建模,因此通常认为这是首选。
虽然您也可以使用1的变体,但不是直接更改帧,而是视图中的布局约束,如果由于某种原因双控制器解决方案是不可接受的。
但是,根据您的问题,实际上您需要UICollectionView
。设置单元格大小后,它将在视图控制器的边界更改期间根据需要重新定位其单元格。