QMUI_iOS icon indicating copy to clipboard operation
QMUI_iOS copied to clipboard

QMUINavigationBarScrollingAnimator 使用问题

Open javaoraspx opened this issue 6 years ago • 3 comments

Bug 表现 使用 QMUINavigationBarScrollingAnimator , 设置顶部导航栏为透明,再切换不同APP后,返回后顶部导航栏为非透明了

截图 已录制GIF qmui

如何重现

  1. 使用最新QMUIDemo_iOS 可以复现
  2. 打开 QMUINavigationBarScrollingAnimator 示例后,切换到不同APP,返回即可重现
  3. 具体表现,查看上面的GIF图片

预期的表现

其他信息

  • 设备: iPhone 11
  • iOS 版本: [iOS 13.2.2]
  • Xcode 版本: [Version 11.2.1 (11B53)]
  • QMUI 版本: [4.0.3]

javaoraspx avatar Nov 15 '19 07:11 javaoraspx

这个问题与 QMUINavigationBarScrollingAnimator 无关,只要某个界面设置了与配置表不一样的样式,就会在切换 App 时被 QMUIThemeManager 覆盖,与这个 issue 相同。

iOS 13 增加了“Dark Mode”的系统主题,而当 App 进入到后台时,iOS 13 会让该 App 先切换到与当前主题不同的另一个主题(例如当前在 Light,则会切到 Dark)并对 App 截图,以保证待会你可能把系统切到另一个主题时,在多任务界面里能看到你的 App 已经是新的颜色,等到重新唤醒 App 时再重新设置一遍主题。因为这个特性,QMUITheme 也会在 App 进入后台、重新唤醒时,被重复切换主题,而当 QMUITheme 发生变化时,就会重新应用整份配置表,由于配置表被应用,于是当前界面的导航栏的背景图也被设置为与配置表相同的值,这就是你描述的问题的原因。

这个问题比较棘手,还在考虑如何优雅解决,在此之前你可以将以下代码添加在你的 vc 里,以覆盖 QMUITheme 的效果:

- (void)qmui_themeDidChangeByManager:(QMUIThemeManager *)manager identifier:(__kindof NSObject<NSCopying> *)identifier theme:(__kindof NSObject *)theme {
    [super qmui_themeDidChangeByManager:manager identifier:identifier theme:theme];
    [self updateNavigationBarAppearance];
}

MoLice avatar Dec 08 '19 18:12 MoLice

添加上面代码可以解决

但是要注意,如果该VC没有load,但是已添加到 nav 中 则需要判断 backgroundImageBlock 等block是否已赋值;

- (UIImage *)navigationBarBackgroundImage {
    if(self.navigationAnimator.backgroundImageBlock){
        return self.navigationAnimator.backgroundImageBlock(self.navigationAnimator, self.navigationAnimator.progress);
    }
    return NavBarBackgroundImage;
}

javaoraspx avatar Dec 11 '19 06:12 javaoraspx

嗯,这时机问题属于业务自行考虑的,QMUI 不作处理。

请勿关闭 issue,待 QMUITheme 的问题解决后我会同步最新信息再关闭 issue。

MoLice avatar Dec 11 '19 06:12 MoLice