JAH*_*lia 9 xcode objective-c storyboard ipad ios
我希望在我的iPAD应用程序上支持横向和纵向方向,该应用程序使用故事板而不涉及Auto Layouton iOS6+and Auto Resizingon iOS 5和更早的错综复杂(因为该应用程序将同时支持iOS 5和6,因此AutoLayout这里不允许),我想到的作为解决方案的起点如下:
创建两个单独的故事板:MainStoryboard-Portrait&MainStoryboard-Landscape,在当前视图控制器(让我们将其命名为FirstViewController)是在肖像,以及用户旋转设备的风景,我instantiate一个新的FirstViewController从MainStoryboard-Landscape当用户旋转回纵向故事板,反之亦然.我在willRotateToInterfaceOrientation方法中做了类似的事情FirstViewController.m:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard-Landscape" bundle:[NSBundle mainBundle]];
FirstViewController *VC = [storyboard instantiateViewControllerWithIdentifier:@"VC1"];
self.view = VC.view;
Run Code Online (Sandbox Code Playgroud)
但是在iOS6 +上发生了以下崩溃:A view can only be associated with at most one view controller at a time!在iOS5上尝试也没有崩溃,但旋转不能正常工作:窗口边界旋转但视图本身保持不变.
如何在iOS 5和6上运行?或者如果还有其他更好的方法,请为我提供一份工作代码示例,我将奖励您50分的赏金.
如果你真的不想使用自动布局,在单个.storyboard中执行此操作仍然可以通过a IBOutlet (weak, nonatomic) UIView* portraitView和a 来完成IBOutlet (weak, nonatomic) UIView* landscapeView.将每个视图创建view为FirstViewController.storyboard中main的子视图.
然后willRotateToInterfaceOrientation:,执行以下操作:
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
{
self.portraitView.hidden = NO;
self.landscapeView.hidden = YES;
}
else
{
self.portraitView.hidden = YES;
self.landscapeView.hidden = NO;
}
Run Code Online (Sandbox Code Playgroud)
在.storyboard中处理您的视图时,您可以通过选中/取消选中hidden右侧边栏中的标记来更好地查看每个子视图.
那么,这样做的另一个好处是,如果你有一些看起来没问题的视图,你就不必为它们维护一个单独的故事板文件和场景.
自动布局确实是一条出路。一旦您有了两个故事板,如果您希望纵向和横向用户体验相同,您就会遇到维护和一致性问题 \xe2\x80\x94。如果您特别希望它们因某种原因而不同,那么两个故事板是合适的。
\n| 归档时间: |
|
| 查看次数: |
2820 次 |
| 最近记录: |