我有一个问题,我的第一个视图控制器固定为纵向。但第二个视图控制器可以是纵向或横向。但是,如果我在第一个视图中并将手机保持在横向状态,请转到下一个视图。屏幕无法更新其方向,但我手动在导航栏上放置项目的代码确实检测到它在横向上。
所以我必须重新旋转设备才能让iOS意识到它已经改变了。
有什么想法吗?!
答案 0 :(得分:1)
添加这些方法
-(BOOL)shouldAutorotate{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations{
return (UIInterfaceOrientationMaskAll);
}
和appdelegate
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
NSUInteger orientations = UIInterfaceOrientationMaskAllButUpsideDown;
if(self.window.rootViewController){
UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
orientations = [presentedViewController supportedInterfaceOrientations];
}
return orientations;
}
答案 1 :(得分:0)
您可以强制将First UIViewController旋转为纵向
#import <objc/message.h>
-(void)viewDidAppear:(BOOL)animated{
objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), UIInterfaceOrientationPortrait );
}
答案 2 :(得分:0)
您可以使用[[UIDevice currentDevice] orientation]。 您还可以使用UIDevice实例来检测设备特征的变化,例如物理方向。
您可以在第一个视图控制器中检测到物理方向是横向的,然后强制第二个视图控制器以横向模式加载。
答案 3 :(得分:0)
您可以在viewWillAppear中尝试此操作
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}
如果ViewController以纵向方式加载并且设备处于横向状态,则它将转变为横向。
或者你可以展示一个被迫处于风景中的模态,并立即将其移除,这也会造成麻烦。
[self presentViewController:PortraitVc animated:NO completion:^{
[PortraitVc dismissViewControllerAnimated:NO completion:nil];
}];