问题是我正在启动应用程序内电子邮件并触发键盘(通过UITextFields),他们正在我的横向应用程序上出现肖像。我可以将其旋转为纵向,然后再次将其旋转,观察应用程序从纵向旋转到横向时发生的黑色旋转角落动画。由于我已经在我的shouldAutorotateToInterfaceOrientation()方法中锁定了任何方向但风景正确,因此视图本身不会旋转,这很好。但是,当我添加这些视图时,应用程序一直认为它们是纵向的,这可以通过UITextField键盘和应用程序内电子邮件方向来证明,除非我旋转为纵向,然后返回横向(这会触发自动旋转方法返回true。
当我添加视图时,有关如何让这个应用知道的任何建议都知道它已经开始了吗?
更新:我曾尝试设置状态栏方向,但它对我不起作用。我不知道是否有一些事实,我删除然后添加视图到应用程序,这混淆了它对方向的理解。你知道苹果对象如UITextField和应用程序内邮件如何确定要显示的方向?他们只是简单地轮询sharedApplication方向吗?对我来说奇怪的是,似乎当我删除并添加新视图时,这些苹果小部件我已经倾斜手机以改变为风景突然恢复显示为肖像。即这一般事件序列:
1)应用程序在横向,触发键盘,它显示肖像
2)倾斜装置使其进入风景。关闭并打开键盘,它在风景中。
3)删除并添加一些视图。
4)再次触发键盘,它以纵向显示
答案 0 :(得分:1)
[UIApplication setStatusBarOrientation:animated:]应该可以提供你想要的东西。
答案 1 :(得分:1)
在Project plist中设置Initial interface orientation
字段
答案 2 :(得分:0)
有趣的是,我发现在发布时设置状态栏方向是不够的。看着字段值,我注意到它在不同时间重置为肖像,例如从取消应用内邮件返回时。我发现多次调用设置状态栏似乎可以解决问题。感谢输入,mbehan。
答案 3 :(得分:0)
删除/添加视图不应更改状态栏方向;据我所知,除非你明确地设置它,否则默认为视图控制器的方向(然后你必须小心,因为视图控制器重置它)。您可以尝试使用UIStatusBarStyleBlackTranslucent并在VC上设置UIViewController.wantsFullScreenLayout以查看正在发生的事情。
(过去,我注意到当我直接在窗口上添加一个视图时,它会变得混乱。在一个只有纵向视图的顶部。它似乎适用于所有其他情况但是......)
您对shouldAutorotateToInterfaceOrientation的实施是什么:?
答案 4 :(得分: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];
}
}