MPVolumeView路线列表支持所有方向,并忽略基础视图控制器

里克·桑托斯(Ric Santos)

这似乎是操作系统错误,但仍需要解决方法。

使用基于视图控制器的方向定位到iOS 8或9,MPVolumeView即使其父视图控制器仅支持单个方向,其路线列表也会一直旋转。

这可能导致系统进入错误的定向状态,其中视图控制器以纵向显示,但状态栏(和控制中心)为横向。

创建了一个演示该错误的测试项目:https : //github.com/NextFaze/MPVolumeViewTest

安德鲁

令人毛骨悚然的解决方案:

#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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对CakePHP控制器中的所有方法重用一个视图

所有视图控制器的变量

设备方向启动选项卡栏应用中的所有视图控制器

在所有视图控制器上方添加视图

所有视图上的页面视图控制器按钮

在 Laravel 中所有控制器的所有方法中传递对象

更改根视图控制器并关闭所有视图控制器

关闭当前视图控制器以下的所有视图控制器

视图控制器之间的过渡方向

某些视图控制器的固定方向

强制视图控制器的方向

支持 ios、swift 3 中特定视图控制器的横向和纵向设备方向

如何从所有视图控制器更新徽章计数?

所有控制器和视图的全局变量

如何为所有iPhone安装视图控制器?

当我的控制器中有方法时,出现“没有路线匹配”错误

控制器类中所有方法的通用代码

laravel在控制器中的所有方法之间共享变量

控制器中所有方法的Spring AOP切入点

根据在codeigniter中选择的控制器名称显示所有方法名称

Swift iOS - 如何打印导航堆栈中尚未推送的所有子视图控制器的列表

如何从控制器将所有用户列表发送到asp.net Core 3中的视图

Swift:关闭所有视图控制器,然后呈现一个视图控制器

返回路线视图而不是控制器

关闭模态视图控制器时如何保持呈现视图控制器的方向?

iOS中子视图控制器方向更改时如何旋转父视图控制器

具有不同方向的多个视图控制器

当我推送具有不同支持方向的控制器时,为什么 UINavigationController 不改变方向?

控制器中没有方法错误