@@ -59,22 +59,11 @@ + (void)_qmui_notifyUserInterfaceStyleWillChangeEvents:(UITraitCollection *)trai
5959 }
6060}
6161
62- + (void )_qmui_notifyUserInterfaceStyleWithWindow : (UIWindow *)window {
63- static UIUserInterfaceStyle currentUserInterfaceStyle;
64- static NSSet <NSString *> *keyboardWindows;
65- static dispatch_once_t onceToken;
66- dispatch_once (&onceToken, ^{
67- currentUserInterfaceStyle = UIUserInterfaceStyleUnspecified;
68- keyboardWindows = [NSSet setWithArray: @[@" UIRemoteKeyboardWindow" , @" UITextEffectsWindow" , @" UITrackingWindowView" ]];
69- });
70-
71- UITraitCollection *traitCollection = UIScreen.mainScreen .traitCollection ;
62+ + (void )_qmui_notifyUserInterfaceStyleWillChangeForTraitCollection : (UITraitCollection *)traitCollection {
63+ static UIUserInterfaceStyle currentUserInterfaceStyle = UIUserInterfaceStyleUnspecified;
7264 if (currentUserInterfaceStyle == traitCollection.userInterfaceStyle ) {
7365 return ;
7466 }
75- if ([keyboardWindows containsObject: NSStringFromClass (window.class)] || window != UIApplication.sharedApplication .qmui_delegateWindow ) {
76- return ;
77- }
7867 currentUserInterfaceStyle = traitCollection.userInterfaceStyle ;
7968
8069 [self _qmui_notifyUserInterfaceStyleWillChangeEvents: traitCollection];
@@ -83,16 +72,18 @@ + (void)_qmui_notifyUserInterfaceStyleWithWindow:(UIWindow *)window {
8372+ (void )_qmui_overrideTraitCollectionMethodIfNeeded {
8473 [QMUIHelper executeBlock: ^{
8574 // / https://github.com/Tencent/QMUI_iOS/issues/1634
86- NSString *willTransitionSel = [NSString qmui_stringByConcat: @" _" , @" willTransitionToTraitCollection: " , @" withTransitionCoordinator :" , nil ];
87- OverrideImplementation (UIWindow. class , NSSelectorFromString (willTransitionSel ), ^id (__unsafe_unretained Class originClass, SEL originCMD, IMP (^originalIMPProvider)(void )) {
88- return ^(UIWindow *selfObject, UITraitCollection *newCollection, id <UIViewControllerTransitionCoordinatorContext> coordinator ) {
75+ NSString *willChangeTraitCollection = [NSString qmui_stringByConcat: @" _" , @" setDefault " , @" TraitCollection :" , nil ];
76+ OverrideImplementation ([UIScreen class ] , NSSelectorFromString (willChangeTraitCollection ), ^id (__unsafe_unretained Class originClass, SEL originCMD, IMP (^originalIMPProvider)(void )) {
77+ return ^(UIScreen *selfObject, UITraitCollection *traitCollection ) {
8978
90- [UITraitCollection _qmui_notifyUserInterfaceStyleWithWindow: selfObject];
79+ if (selfObject == UIScreen.mainScreen ) {
80+ [UITraitCollection _qmui_notifyUserInterfaceStyleWillChangeForTraitCollection: traitCollection];
81+ }
9182
9283 // call super
93- void (*originSelectorIMP)(id , SEL , UITraitCollection *, id <UIViewControllerTransitionCoordinatorContext> );
94- originSelectorIMP = (void (*)(id , SEL , UITraitCollection *, id <UIViewControllerTransitionCoordinatorContext> ))originalIMPProvider ();
95- originSelectorIMP (selfObject, originCMD, newCollection, coordinator );
84+ void (*originSelectorIMP)(id , SEL , UITraitCollection *);
85+ originSelectorIMP = (void (*)(id , SEL , UITraitCollection *))originalIMPProvider ();
86+ originSelectorIMP (selfObject, originCMD, traitCollection );
9687 };
9788 });
9889 } oncePerIdentifier: @" UITraitCollection addUserInterfaceStyleWillChangeObserver" ];
0 commit comments