Tencent / QMUI_iOS

QMUI iOS——致力于提高项目 UI 开发效率的解决方案
http://qmuiteam.com/ios
Other
7.11k stars 1.39k forks source link

使用NavigationBarTransition后,出现navigation的背景图变空 #498

Closed KaoUserName closed 5 years ago

KaoUserName commented 5 years ago

请填写运行环境

请描述具体问题

  1. 在push一个使用QMUINavigationBarScrollingAnimator,navigationBar背景开始为透明颜色。不管滚动与否,返回会发生navigationBar的背景变空
  2. 还有一个情况是push一个控制器,navigationBar就是空的。但又不是每个navigationController都出现这个情况
  3. 在 NavigationBarTransition_viewWillAppear 打断点,self是有值的,但是执行 renderNavigationStyleInViewController:animated:,控制台看到输入的viewController莫名为空。但是根据执行的逻辑来看应该是有值。
  4. 因为在QMUIDemo执行类似的逻辑是正常的,也没有办法提供一个产生问题的demo。想请问下navigationBar样式除了 renderNavigationStyleInViewController:animated:控制之外,还有没有地方可能会影响到

    相关截图(断点的堆栈、控制台的 log)

    image

MoLice commented 5 years ago
  1. 请检查配置表里 QMUICMI.automaticCustomNavigationBarTransitionStyle 的值是否为 NO,如果为 NO,请改为 YES 后再测试。或者,在你使用 QMUINavigationBarScrollingAnimator 的那个 viewController 内实现方法 customNavigationBarTransitionKey 并返回一个非空的 NSString。如果这两种方法仍未能解决问题,请告知。
  2. 描述过于简单,不清楚被 push 的那个控制器有什么代码是会修改 navigationBar 样式的,所以无法下结论,建议提供代码(navigationBar 是共享的,所以前后两个 viewController 均有可能影响它的样式)或者 Demo。
  3. (无特别说明,留空)
  4. 配置表里相关的设置也会影响,那些设置是通过 appearance 实现的。你可以在 QMUIConfiguration.m 内搜索 UINavigationBar appearance 即可看到 7 个匹配结果。
MoLice commented 5 years ago

该 issue 因不活跃而被关闭。

KaoUserName commented 5 years ago

1和2的问题,当automaticCustomNavigationBarTransitionStyle为 YES 的时候会出现,为 NO 的时候是正常的。

感觉问题的产生是因为使用 runtime 交换的 viewDidAppear:后,新的方法都是没有执行的。我在 UINavigationController+NavigationBarTransition, UIViewController+QMUI,QMUINavigationController 的新交换方法打断点都是没有执行的。

KaoUserName commented 5 years ago

现在产生一个问题是,当前后两个navigationBar不一致时,由于虚拟的假bar是在交换的方法去除的,当前一个bar的颜色是透明的时候,会显示异常。

不知道工程的哪里配置问题,无法在其他Demo重现。

KaoUserName commented 5 years ago

同文件的其他交换方法是执行的

MoLice commented 5 years ago

对,我明白你的问题表现是什么,但我无法单纯根据你的表现描述就能定位到问题所在,因为像“方法打了断点都没有执行”,可能导致这种现象的原因太多了。所以目前我能做的是,如果你能提供 Demo,我可以帮你排查,但如果提供不了相关代码,我也无能为力😔

KaoUserName commented 5 years ago

[Uploading testDemo.zip…]() 为了做Demo删减代码时,发现原来是最新版的 UMCAnalytics 的问题。 可能该框架对 UIViewController 的生命周期有做处理,产生的冲突。能重现的demo已上传。

对于您的及时回答表示感谢,也对自己一味的要求感到惭愧。没有做过多的验证,只想从别人那边获取帮助,需要好好改正。

KaoUserName commented 5 years ago

testDemo.zip

MoLice commented 5 years ago

UMCAnalytics 属于闭源框架,就没有排查意义了。建议制作一个空白 Demo,去掉 QMUI,只引入 UMCAnalytics,然后在业务侧自己 swizzle 相关方法,验证是否有问题。如果有问题,说明确实是 UMCAnalytics 内部的实现问题,可以反馈给 UMCAnalytics 团队。