1

问题是我正在启动应用内电子邮件并触发键盘(通过 UITextFields),它们在我的横向应用程序中出现纵向。我可以将其纵向旋转,然后再次横向旋转,观察应用程序从纵向旋转到横向时出现的黑色旋转角动画。由于我在 shouldAutorotateToInterfaceOrientation() 方法中锁定了除横向之外的任何方向,因此视图本身不会旋转,这很好。但是,当我添加这些视图时,应用程序一直认为它们是纵向的,正如 UITextField 键盘和应用内电子邮件方向所证明的那样,除非我旋转到纵向,然后再回到横向(这会触发 autorotate 方法返回 true。

当我添加视图时,关于如何让这个应用程序知道它已经在景观中的任何建议?

更新:我曾尝试设置状态栏方向,但它对我不起作用。我不知道我删除然后向应用程序添加视图是否会混淆它对方向的理解。您知道诸如 UITextField 和应用内邮件之类的苹果对象如何确定要显示的方向吗?他们只是轮询 sharedApplication 方向吗?对我来说奇怪的是,当我删除并添加新视图时,我倾斜手机以更改为横向的这些苹果小部件似乎突然恢复为纵向显示。即这个一般的事件序列:

1)横向应用,触发键盘,显示纵向

2)倾斜装置使其进入景观。关闭和打开键盘,它是横向的。

3)删除并添加一些视图。

4)再次触发键盘,它以纵向显示

4

5 回答 5

1

Initial interface orientation项目 plist 中的设置字段

于 2011-04-25T11:29:11.843 回答
1

[UIApplication setStatusBarOrientation:animated:] 应该给你你想要的。

于 2010-08-13T11:30:46.180 回答
0

有趣的是,我发现在启动时设置状态栏方向是不够的。观察字段值,我注意到它在不同时间重置为纵向,例如从取消应用内邮件返回时。我发现多次调用设置状态栏似乎可以解决问题。感谢您的输入,姆贝汉。

于 2010-08-13T17:30:26.943 回答
0

移除/添加视图不应该改变状态栏的方向;据我所知,除非您明确设置它,否则默认为视图控制器的方向(然后您必须小心,因为视图控制器会重置它)。您可以尝试使用 UIStatusBarStyleBlackTranslucent 并在您的 VC 上设置 UIViewController.wantsFullScreenLayout 以查看发生了什么。

(过去,我注意到当我在仅纵向视图之上直接向窗口添加视图时会感到困惑。它似乎在所有其他情况下都有效......)

你的 shouldAutorotateToInterfaceOrientation: 的实现是什么?

于 2010-08-13T17:59:06.170 回答
0

尝试这个:

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

//Rotate the complete view to look like landscape view
    [self rotateToLandscape];
}

和旋转方法;

-(void)rotateToLandscape
{
    UIWindow *win = [[UIApplication sharedApplication]keyWindow];
if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){
    [[[UIApplication sharedApplication] keyWindow] setBackgroundColor:[UIColor blackColor]];
    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    win.transform = CGAffineTransformIdentity;
    win.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    win.bounds = CGRectMake(0.0f, 0.0f, 480, 320);
    win.center = CGPointMake(160.0f, 240.0f);
    [UIView commitAnimations];
}   

}

于 2012-04-27T07:44:49.477 回答