Method Swizzling设置UIViewController视图背景颜色的坑点以及解决方法

之前看到一篇文章,笔者打算要用runtime同意修改项目所有viewController的背景颜色,但是遇到一个比较奇怪的问题:

在navigationController滑动返回的时候,整个界面变成灰色了

具体问题描述可以看这篇文章


从笔者分析可以看到滑动返回的时候屏幕原有的window上面多出一个名为UITextEffectsWindow的window,这是iOS8新增的特性。

Paste_Image.png

既然是window,那么多半里面有view或者viewController,然后我们通过runtime重写navigationController的方法_updateInteractiveTransition来打印这个window到底有没有viewController,然后得出日志:

Paste_Image.png

可以看出来UITextEffectsWindow有一个名为UIInputWindowController的视图控制器,想必然也是UIViewController的子类,由于笔者进行Method Swizzling的时候是在没有过滤这个UIInputWindowController类,导致UIInputWindowController的backgroundColor也被修改。


解决方法:

设置背景颜色的时候把UIInputWindowController过滤

- (void) ghh_viewDidLoad {
    // 过滤操作
    Class class = NSClassFromString(@"UIInputWindowController");
    if (self.class != class)
        self.view.backgroundColor = [UIColor lightGrayColor];
    
    NSLog(@"%@ method did changed!", self);
    [self ghh_viewDidLoad];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容