- 多个库的 swizzle 重复造成的冲突。
- 导致系统方法出现异常。
针对 1 之前有篇文章介绍过,这里着重介绍下第二种情况。
通常想要分享多张图片,会使用系统的类 UIActivityViewController
。我也是使用这个类进行分享的时候,发现通过信息分享图片右上角的取消按钮不见了,请看下图:
正常情况下,显示如下:
这是我遇到的情况:
这里很明显是导航栏上的显示出现问题,所以,优先从代码关于导航栏修改方面入手,定位 bug 出现的原因,最终发现是第三方库 FDFullscreenPopGesture
导致的。而且这个库就是使用 swizzle 方法替换系统方法,导致对 UIActivityViewController
的使用造成的影响。其实影响的代码就是
[strongSelf setNavigationBarHidden:viewController.fd_prefersNavigationBarHidden animated:animated];
也就是影响到了系统导航栏的隐藏与显示逻辑。从上面两个图的界面也可以看到,正常情况下系统导航栏是隐藏的,所以界面偏移正常,而非正常情况下系统导航栏是显示的,所以界面会向下偏移。当然通过运行代码查看 view 层级会更加清楚。测试代码在这里。