2015-12-18 15 views
5

這似乎是一個操作系統錯誤,但仍需要解決方法。MPVolumeView路由列表支持所有方向並忽略底層視圖控制器

針對iOS 8或9,使用基於視圖控制器的方向,MPVolumeView的路由列表將始終旋轉,即使其父視圖控制器僅支持單個方向。

這可能會導致系統進入錯誤的方向狀態,其中視圖控制器以縱向顯示,但狀態欄(和控制中心)爲橫向。

已經創建了一個演示bug的測試項目:https://github.com/NextFaze/MPVolumeViewTest

+0

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

回答

1

哈克解決方案使用混寫:

#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 
相關問題