2015-12-18 42 views
5

Bu bir OS hatası gibi görünüyor, ancak yine de bir geçici çözüm gerekiyor. Görünüm denetleyici tabanlı yönlendirmeyi kullanarak, iOS 8 veya 9'u hedefleme, ana görünüm denetleyicisi yalnızca tek bir yönlendirmeyi desteklese bile, MPVolumeView'un rota listesi her zaman döner.MPVolumeView yol listesi tüm yönelimleri destekliyor ve temel görünüm denetleyicisini görmezden geliyor

Bu sistem görünümü denetleyicisi dikey gösterilmiştir yanlış bir yönlendirme durumuna almak neden olabilir, ancak durum çubuğu (ve kontrol merkezi) yatay bulunmaktadır. https://github.com/NextFaze/MPVolumeViewTest

+0

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

hata gösterir bir test projesi oluşturdunuz mu –

cevap

1

hacky çözüm kullanarak 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