之前看到一篇文章,笔者打算要用runtime同意修改项目所有viewController的背景颜色,但是遇到一个比较奇怪的问题:
在navigationController滑动返回的时候,整个界面变成灰色了
具体问题描述可以看这篇文章
从笔者分析可以看到滑动返回的时候屏幕原有的window上面多出一个名为UITextEffectsWindow
的window,这是iOS8新增的特性。
既然是window,那么多半里面有view或者viewController,然后我们通过runtime重写navigationController的方法_updateInteractiveTransition
来打印这个window到底有没有viewController,然后得出日志:
可以看出来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];
}
网友评论