iOS8 ORIENTATION:supportedInterfaceOrientations 调用但没有方向变化

Posted

技术标签:

【中文标题】iOS8 ORIENTATION:supportedInterfaceOrientations 调用但没有方向变化【英文标题】:iOS8 ORIENTATION: supportedInterfaceOrientations called but no orientation change 【发布时间】:2015-02-13 11:21:13 【问题描述】:

我有一个导航控制器:

    //=========================
    - (BOOL)shouldAutorotate;
    
        return YES;
    

    - (NSUInteger)supportedInterfaceOrientations
    
        NSLog(@"Nav: supported Orientation");     
        if ([[self topViewController] respondsToSelector:@selector(supportedInterfaceOrientations)])

       else
          return [super supportedInterfaceOrientations];
    

    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
    
        [self.topViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    

    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
        [self.topViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    

我的 ROOTCTRL 有:

//=========================
- (NSUInteger)supportedInterfaceOrientations

    return UIInterfaceOrientationMaskLandscape;


-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;


-(BOOL)shouldAutorotate

    return YES;


- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
    NSString *risp;
    switch (self.interfaceOrientation) 
        case UIInterfaceOrientationLandscapeLeft:
            risp = @"LAND_LEFT";
            break;
        case UIInterfaceOrientationLandscapeRight:
            risp = @"LAND_RIGHT";
            break;
        case UIInterfaceOrientationPortrait:
            risp = @"PORT";
            break;
        case UIInterfaceOrientationPortraitUpsideDown:
            risp = @"PORT_UPsideDOWN";
            break;
        case UIInterfaceOrientationUnknown:
            risp = @"UNKNOW";
            break;
        default:
            break;
    
    NSLog(@"HOME didRotate:%@",risp);


-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration



UINavigationController的

supportedInterfaceOrientations总是被调用,Home控制器的supportedInterfaceOrientations总是被调用;但主页不会从 LANDSCAPE LEFT 旋转到 LANDSCAPE RIGHT,反之亦然:

因此 Home ctrl 在启动时具有正确的方向,但如果设备确实旋转 Home 控制器永远不会旋转...它仅称为 supportedInterfaceOrientations 方法(导航控制器和根控制器)没有效果...

我做错了什么??

【问题讨论】:

【参考方案1】:

如果在 ios8 上运行并且您的代码在 iOS8 之前就已经存在,请检查以下答案。删除您的应用程序委托中提到的行(如果存在)并且它应该开始工作。

UISplitViewController rotation iOS8 not working as expected

【讨论】:

no... 我尝试评论 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 行(注释掉这个如果它在那里并且旋转应该开始工作。)但仍然有被称为支持方向的日志......但在应用程序生命周期中没有方向:(我不知道为什么 如果您在 iOS8 上运行,则该行绝对应该被注释掉,因为它完全停止旋转工作并且不再需要它。旧 xcode 一代的宿醉。您是否尝试过构建清洁和重建?总是值得一试。 我发现了错误...这是我的 iPad3 ...我已经恢复它,现在它可以工作了...也许我已经从 iOS7 更新了 iOs8...在每次旋转后进行全新安装是正确的!!谢谢大家的帮助!!

以上是关于iOS8 ORIENTATION:supportedInterfaceOrientations 调用但没有方向变化的主要内容,如果未能解决你的问题,请参考以下文章

如何处理: UIActionSheet deprecated (iOS8) X UIAlertController not supported (iOS7)

IOS8 PUSH解决方法

ExifInterface返回图像方向0

Android入门——UI

线性布局中心化

修bug感悟