2626#import " UINavigationController+KMNavigationBarTransition_internal.h"
2727#import " UINavigationBar+KMNavigationBarTransition_internal.h"
2828#import " UIScrollView+KMNavigationBarTransition_internal.h"
29+ #import " KMWeakObjectContainer.h"
2930#import < objc/runtime.h>
3031#import " KMSwizzle.h"
3132
@@ -143,8 +144,8 @@ - (void)km_addTransitionNavigationBarIfNeeded {
143144}
144145
145146- (void )km_adjustScrollViewContentOffsetIfNeeded {
146- if ([ self .view isKindOfClass: [ UIScrollView class ]]) {
147- UIScrollView *scrollView = (UIScrollView *)self. view ;
147+ UIScrollView *scrollView = self. km_visibleScrollView ;
148+ if (scrollView) {
148149 UIEdgeInsets contentInset;
149150#ifdef __IPHONE_11_0
150151 if (@available (iOS 11.0 , *)) {
@@ -175,8 +176,8 @@ - (void)km_adjustScrollViewContentInsetAdjustmentBehavior {
175176 return ;
176177 }
177178 if (@available (iOS 11.0 , *)) {
178- if ([ self .view isKindOfClass: [ UIScrollView class ]]) {
179- UIScrollView *scrollView = (UIScrollView *)self. view ;
179+ UIScrollView *scrollView = self. km_visibleScrollView ;
180+ if (scrollView) {
180181 UIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior = scrollView.contentInsetAdjustmentBehavior ;
181182 if (contentInsetAdjustmentBehavior != UIScrollViewContentInsetAdjustmentNever) {
182183 scrollView.km_originalContentInsetAdjustmentBehavior = contentInsetAdjustmentBehavior;
@@ -191,8 +192,8 @@ - (void)km_adjustScrollViewContentInsetAdjustmentBehavior {
191192- (void )km_restoreScrollViewContentInsetAdjustmentBehaviorIfNeeded {
192193#ifdef __IPHONE_11_0
193194 if (@available (iOS 11.0 , *)) {
194- if ([ self .view isKindOfClass: [ UIScrollView class ]]) {
195- UIScrollView *scrollView = (UIScrollView *)self. view ;
195+ UIScrollView *scrollView = self. km_visibleScrollView ;
196+ if (scrollView) {
196197 if (scrollView.km_shouldRestoreContentInsetAdjustmentBehavior ) {
197198 scrollView.contentInsetAdjustmentBehavior = scrollView.km_originalContentInsetAdjustmentBehavior ;
198199 scrollView.km_shouldRestoreContentInsetAdjustmentBehavior = NO ;
@@ -211,4 +212,20 @@ - (void)setKm_transitionNavigationBar:(UINavigationBar *)navigationBar {
211212 objc_setAssociatedObject (self, @selector (km_transitionNavigationBar ), navigationBar, OBJC_ASSOCIATION_RETAIN_NONATOMIC );
212213}
213214
215+ - (UIScrollView *)km_scrollView {
216+ return km_objc_getAssociatedWeakObject (self, _cmd);
217+ }
218+
219+ - (void )setKm_scrollView : (UIScrollView *)scrollView {
220+ km_objc_setAssociatedWeakObject (self, @selector (km_scrollView ), scrollView);
221+ }
222+
223+ - (UIScrollView *)km_visibleScrollView {
224+ UIScrollView *scrollView = self.km_scrollView ;
225+ if (!scrollView && [self .view isKindOfClass: [UIScrollView class ]]) {
226+ scrollView = (UIScrollView *)self.view ;
227+ }
228+ return scrollView;
229+ }
230+
214231@end
0 commit comments