2015-12-18 13 views
5

Dies scheint ein Betriebssystemfehler zu sein, aber es ist weiterhin eine Problemumgehung erforderlich.MPVolumeView-Routeliste unterstützt alle Orientierungen und ignoriert den zugrunde liegenden Ansichtscontroller

Ausrichtung von iOS 8 oder 9, mit Hilfe der View Controller-basierten Ausrichtung, MPVolumeView Routeliste wird immer rotieren, auch wenn der Eltern-View-Controller nur eine einzige Ausrichtung unterstützt.

Dies kann dazu führen, dass das System in einen falschen Orientierungsstatus versetzt wird, in dem der Ansichtscontroller im Hochformat angezeigt wird, die Statusleiste (und das Kontrollzentrum) jedoch im Querformat angezeigt werden.

Haben Sie ein Testprojekt erstellt, der den Bug demonstriert: https://github.com/NextFaze/MPVolumeViewTest

+0

https://openradar.appspot.com/radar?id=4974311702003712 –

Antwort

1

hacky Lösung mit Swizzling:

#import "UIViewController+RoutingSheet.h" 
#import <objc/runtime.h> 

@implementation UIViewController (RoutingSheet) 

+ (void)load { 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     SEL originalSelector = @selector(shouldAutorotate); 
     SEL swizzledSelector = @selector(shouldAutoRotateOverrideRoutingSheet); 
     Method originalMethod = class_getInstanceMethod(self, originalSelector); 
     Method extendedMethod = class_getInstanceMethod(self, swizzledSelector); 
     method_exchangeImplementations(originalMethod, extendedMethod); 
    }); 
} 

- (UIWindow *)currentWindow { 
    for (UIWindow *window in [[UIApplication sharedApplication] windows]) { 
     if (window.rootViewController == self) 
      return window; 
    } 
    return nil; 
} 

- (BOOL)shouldAutoRotateOverrideRoutingSheet { 
    UIWindow *window = [self currentWindow]; 
    if (window != nil) { 
     NSString *className = NSStringFromClass(window.class); 
     if ([className containsString:@"MPAVRoutingSheetSecureWindow"]) { 
      return NO; 
     } 
    } 
    return [self shouldAutoRotateOverrideRoutingSheet]; 
} 

@end