2

我有一个带有 splitcontroller 的通用应用程序和一个从 detailcontroller 的 viewdidload 模态显示的模态(它的登录屏幕)

打开 ipad 版本时,我希望能够根据设备的初始方向以纵向或横向启动它。问题是它总是作为肖像启动(预期根据文档)。

如果我将设备设置为纵向,然后如果是横向,则它可以工作。但是,如果我直接打开应用程序,它不会。

顺便说一句:我已经设置return true(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation那个登录视图控制器

更新: 如果我从 viewDidAppear 而不是 viewDidLoad 执行 segue,模态的方向正常工作,但在模态之前看到 SplitController 一段时间,我该如何避免这种情况?

- (void)viewDidAppear:(BOOL)animated
{
    [self.splitViewController performSegueWithIdentifier:@"toModal" sender:self.splitViewController];
}
4

1 回答 1

1

您可以有条件地设置的方向(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation。像这样的东西并不漂亮,但它有效:

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

if(orientation == 0) //Default orientation 
    //UI is in Default (Portrait) -- this is really a just a failsafe. 
else if(orientation == UIInterfaceOrientationPortrait)
    //Do something if the orientation is in Portrait
else if(orientation == UIInterfaceOrientationLandscapeLeft)
    // Do something if Left
else if(orientation == UIInterfaceOrientationLandscapeRight)
    //Do something if right

否则,这篇文章似乎与您正在尝试做的事情相当相关:

为 iPad 横向启动应用程序


提案 2


您可以使用以下方法创建一个具有查找设备方向(即“deviceInfo”)的方法的类:

UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication]statusBarOrientation])

UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication]statusBarOrientation])

您还可以存储您想要的任何拉伸因子/尺寸/测量值。然后在view里面-(id)initWithFrame:(CGRect)frame你可以调用你的方法来检查方向(即deviceInfo.isLandscape?)。然后设置你viewautoresizingMask等于 UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth。然后,-(void)layoutSubviews设置view.frame等于您想要的任何尺寸:

CGRectMake(x-origin, y-origin, width, height);

这是获取当前方向的参考:

http://www.ddeville.me/2011/01/getting-the-interface-orientation-in-ios/

更改视图框架的尺寸相对简单,可以在 Apple 的文档或一些简单的谷歌搜索中找到。

于 2012-07-23T22:58:35.657 回答