Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ViewController设置不同backgroundImage,在push及pop时出现黑色 #491

Closed
Juice007 opened this issue Jan 23, 2019 · 6 comments

Comments

Projects
None yet
3 participants
@Juice007
Copy link

commented Jan 23, 2019

请填写运行环境

  • 设备:iPhone
  • 系统:iOS 12.1.2
  • Xcode 版本:10.1
  • QMUI iOS 版本:3.1.0

请描述具体问题

首先说下情况,在配置表里设置了automaticCustomNavigationBarTransitionStyle为YES,且TableViewController继承自QMUICommonTableViewController的话,push及pop是没有任何问题的。

但是我项目中的UITableViewController是静态的,所以就用的storyboard布局,因此就无法继承自QMUICommonTableViewController了。我的做法是新建了一个StaticTableViewController继承自UITableViewController,然后将QMUICommonViewController中的那些空视图啊,键盘管理这些方法复制到我的StaticTableViewController以达到静态的tableView也能用上QMUI的目的。

但是现在我的tableView继承自StaticTableViewController在push时就会出现黑色,自己在这个文件中UINavigationController+NavigationBarTransition.m断点调了很久,发现和继承自QMUICommonTableViewController比起来,好像该调用的方法也都调了的,实在没发现是哪里的问题

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

20190123_194716

@Juice007

This comment has been minimized.

Copy link
Author

commented Jan 23, 2019

方便起见 再配个demo吧
QMUIDemo.zip

@Juice007

This comment has been minimized.

Copy link
Author

commented Jan 24, 2019

发现问题可以简化一下:vc直接继承自UITableViewController,再遵守<QMUINavigationControllerDelegate>的话,push&pop也是会有黑色出现的

@TheLittleBoy

This comment has been minimized.

Copy link

commented Jan 24, 2019

storyboard布局也是可以修改继承的父类哦~
但是QMUICommonTableViewController是继承自QMUICommonViewController。还是放弃使用UITableViewController吧!

@MoLice

This comment has been minimized.

Copy link
Collaborator

commented Jan 24, 2019

这里有几个问题:

  1. QMUI 为优化转场动画而添加的假 bar 是加到当前两个 viewController.view 上的,并且布局会保证与系统的 navigationBar 在相同位置。
  2. UITableViewController.view.clipsToBounds 默认为 YES(而 UIViewController.view.clipsToBounds 默认为 NO),并且 view.frame.origin.y 是从导航栏底部开始的,这导致在你的两个界面里,QMUI 添加的假 bar 被 clip 掉,看不见,从而露出背后 UIWindow 默认的背景黑色,因为你的界面继承自 UITableViewController
  3. 对于这种 clipsToBounds 为 YES 的场景,QMUI 已经有提示了,代码在 UINavigationController+NavigationBarTransition.m:203,这里用 QMUILog() 的方式提示,但在 3.1.0 版本里新增了 QMUIConsole 组件和配置表开关 ShouldPrintQMUIWarnLogToConsole(默认关闭),由于实现上的 bug,导致没开启 ShouldPrintQMUIWarnLogToConsole 的情况下,QMUILog 不会把消息打印到 Xcode 控制台上,导致可能出现了提示也没发现,这个问题我们会修复。

综上,以下是推荐可选的若干解决方式:

  1. 让你的列表 viewController.view.clipsToBoundsNO,但因此你可能需要同时修改列表的布局(例如 y 从屏幕顶部开始)。
  2. 改为使用 QMUICommonTableViewController,至于静态列表的需求可以用 QMUIStaticTableView 组件,使用示例请参考 QMUI Demo 的 QDStaticTableViewController
  3. 对于 QMUICommonTableViewController 父类不是 UITableViewController 而导致在 storyboard 里无法使用静态列表特性的限制,我们内部也在斟酌,后续希望能给出一个满意的解决方法。
@Juice007

This comment has been minimized.

Copy link
Author

commented Jan 24, 2019

原来是因为UITableViewController.view.clipsToBounds默认为YES导致的。我在前后两个界面都写一句self.view.clipsToBounds = NO;就不会有黑色了。

谢谢Moly大佬的仔细解答~

@MoLice

This comment has been minimized.

Copy link
Collaborator

commented Jan 24, 2019

上文提到的 QMUIConsole 引发的 bug 已在 3.1.1 中修复。

@MoLice MoLice closed this Jan 24, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.