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

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

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

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


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

Method Swizzling设置UIViewController视图背景颜色的坑点以及解决方法_第1张图片
Paste_Image.png

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

Method Swizzling设置UIViewController视图背景颜色的坑点以及解决方法_第2张图片
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];
}

你可能感兴趣的:(Method Swizzling设置UIViewController视图背景颜色的坑点以及解决方法)