@@ -118,6 +118,9 @@ + (void)load {
118118 if (shouldCustomNavigationBarTransition) {
119119 disappearingViewController.qmuinb_shouldShowTransitionBar = YES ;
120120 appearingViewController.qmuinb_shouldShowTransitionBar = YES ;
121+
122+ // 只绑定即将显示的 vc 的 bar,注意可能在 setNavigationBarHidden: 里被覆盖,引起下述问题:
123+ // https://github.com/Tencent/QMUI_iOS/issues/1335
121124 weakNavigationController.navigationBar .qmuinb_copyStylesToBar = appearingViewController.transitionNavigationBar ;
122125 }
123126 }
@@ -164,7 +167,7 @@ + (void)load {
164167 if (hidden) {
165168 [selfObject.topViewController removeTransitionNavigationBar ];
166169 } else {
167- [selfObject.topViewController addTransitionNavigationBarIfNeeded ];
170+ [selfObject.topViewController addTransitionNavigationBarAndBindNavigationBar: YES ];
168171 }
169172 }
170173 };
@@ -214,7 +217,7 @@ + (void)load {
214217 });
215218}
216219
217- - (void )addTransitionNavigationBarIfNeeded {
220+ - (void )addTransitionNavigationBarAndBindNavigationBar : ( BOOL ) shouldBind {
218221 // add 时虽然过滤了 navigationBarHidden 的条件,但可能在 push/pop 时,新界面暂时还没刷新导航栏的显隐状态,所以还是需要在 viewWillLayoutSubviews 那边再重新根据 navigationBarHidden 的值来决定是否隐藏假 bar
219222 if (!self.qmuinb_shouldShowTransitionBar || self.transitionNavigationBar || !self.navigationController .navigationBar || self.navigationController .navigationBarHidden ) {
220223 return ;
@@ -234,8 +237,10 @@ - (void)addTransitionNavigationBarIfNeeded {
234237 }
235238#endif
236239 [self .view addSubview: customBar];
237- customBar.originalNavigationBar = self.navigationController .navigationBar ;
238-
240+ customBar.originalNavigationBar = self.navigationController .navigationBar ;// 注意这里内部不会保留真 bar 和假 bar 的 copy 关系
241+ if (shouldBind) {
242+ self.navigationController .navigationBar .qmuinb_copyStylesToBar = customBar;
243+ }
239244 [self layoutTransitionNavigationBar ];
240245}
241246
@@ -561,7 +566,7 @@ - (BOOL)prefersNavigationBarBackgroundViewHidden {
561566- (void )setQmuinb_shouldShowTransitionBar : (BOOL )shouldShowTransitionBar {
562567 objc_setAssociatedObject (self, &kAssociatedObjectKey_shouldShowTransitionBar , @(shouldShowTransitionBar), OBJC_ASSOCIATION_RETAIN_NONATOMIC );
563568 if (shouldShowTransitionBar) {
564- [self addTransitionNavigationBarIfNeeded ];
569+ [self addTransitionNavigationBarAndBindNavigationBar: NO ]; // 这里不绑定 bar,因为不知道此时是两个 vc 里的哪一个
565570 self.prefersNavigationBarBackgroundViewHidden = YES ;
566571 } else {
567572 [self removeTransitionNavigationBar ];
0 commit comments