|
|
@@ -120,76 +120,26 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
|
|
|
}
|
|
|
|
|
|
|
|
|
-#pragma mark - Status Bar Wrangling for iOS 7
|
|
|
-
|
|
|
-// Try to get the preferred status bar properties from the app's root view controller (not us).
|
|
|
-// In general, our window shouldn't be the key window when this view controller is asked about the status bar.
|
|
|
-// However, we guard against infinite recursion and provide a reasonable default for status bar behavior in case our window is the keyWindow.
|
|
|
-
|
|
|
-- (UIViewController *)viewControllerForStatusBarAndOrientationProperties
|
|
|
-{
|
|
|
- UIViewController *viewControllerToAsk = [[[UIApplication sharedApplication] keyWindow] rootViewController];
|
|
|
-
|
|
|
- // On iPhone, modal view controllers get asked
|
|
|
- if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
|
|
|
- while (viewControllerToAsk.presentedViewController) {
|
|
|
- viewControllerToAsk = viewControllerToAsk.presentedViewController;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return viewControllerToAsk;
|
|
|
-}
|
|
|
-
|
|
|
-- (UIStatusBarStyle)preferredStatusBarStyle
|
|
|
-{
|
|
|
- UIViewController *viewControllerToAsk = [self viewControllerForStatusBarAndOrientationProperties];
|
|
|
- UIStatusBarStyle preferredStyle = UIStatusBarStyleDefault;
|
|
|
- if (viewControllerToAsk && viewControllerToAsk != self) {
|
|
|
- // We might need to foward to a child
|
|
|
- UIViewController *childViewControllerToAsk = [viewControllerToAsk childViewControllerForStatusBarStyle];
|
|
|
- while (childViewControllerToAsk && childViewControllerToAsk != viewControllerToAsk) {
|
|
|
- viewControllerToAsk = childViewControllerToAsk;
|
|
|
- childViewControllerToAsk = [viewControllerToAsk childViewControllerForStatusBarStyle];
|
|
|
- }
|
|
|
-
|
|
|
- preferredStyle = [viewControllerToAsk preferredStatusBarStyle];
|
|
|
- }
|
|
|
- return preferredStyle;
|
|
|
-}
|
|
|
-
|
|
|
-- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
|
|
|
-{
|
|
|
- UIViewController *viewControllerToAsk = [self viewControllerForStatusBarAndOrientationProperties];
|
|
|
- UIStatusBarAnimation preferredAnimation = UIStatusBarAnimationFade;
|
|
|
- if (viewControllerToAsk && viewControllerToAsk != self) {
|
|
|
- preferredAnimation = [viewControllerToAsk preferredStatusBarUpdateAnimation];
|
|
|
- }
|
|
|
- return preferredAnimation;
|
|
|
-}
|
|
|
+#pragma mark - Rotation
|
|
|
|
|
|
-- (BOOL)prefersStatusBarHidden
|
|
|
+- (UIViewController *)viewControllerForRotationAndOrientation
|
|
|
{
|
|
|
- UIViewController *viewControllerToAsk = [self viewControllerForStatusBarAndOrientationProperties];
|
|
|
- BOOL prefersHidden = NO;
|
|
|
- if (viewControllerToAsk && viewControllerToAsk != self) {
|
|
|
- // Again, we might need to forward to a child
|
|
|
- UIViewController *childViewControllerToAsk = [viewControllerToAsk childViewControllerForStatusBarHidden];
|
|
|
- while (childViewControllerToAsk && childViewControllerToAsk != viewControllerToAsk) {
|
|
|
- viewControllerToAsk = childViewControllerToAsk;
|
|
|
- childViewControllerToAsk = [viewControllerToAsk childViewControllerForStatusBarHidden];
|
|
|
- }
|
|
|
-
|
|
|
- prefersHidden = [viewControllerToAsk prefersStatusBarHidden];
|
|
|
+ UIWindow *window = self.previousKeyWindow ?: [[UIApplication sharedApplication] keyWindow];
|
|
|
+ UIViewController *viewController = window.rootViewController;
|
|
|
+ NSString *viewControllerSelectorString = [@[@"_vie", @"wContro", @"llerFor", @"Supported", @"Interface", @"Orientations"] componentsJoinedByString:@""];
|
|
|
+ SEL viewControllerSelector = NSSelectorFromString(viewControllerSelectorString);
|
|
|
+ if ([viewController respondsToSelector:viewControllerSelector]) {
|
|
|
+#pragma clang diagnostic push
|
|
|
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
|
|
|
+ viewController = [viewController performSelector:viewControllerSelector];
|
|
|
+#pragma clang diagnostic pop
|
|
|
}
|
|
|
- return prefersHidden;
|
|
|
+ return viewController;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-#pragma mark - Rotation
|
|
|
-
|
|
|
- (NSUInteger)supportedInterfaceOrientations
|
|
|
{
|
|
|
- UIViewController *viewControllerToAsk = [self viewControllerForStatusBarAndOrientationProperties];
|
|
|
+ UIViewController *viewControllerToAsk = [self viewControllerForRotationAndOrientation];
|
|
|
NSUInteger supportedOrientations = [FLEXUtility infoPlistSupportedInterfaceOrientationsMask];
|
|
|
if (viewControllerToAsk && viewControllerToAsk != self) {
|
|
|
supportedOrientations = [viewControllerToAsk supportedInterfaceOrientations];
|
|
|
@@ -206,7 +156,7 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
|
|
|
|
|
|
- (BOOL)shouldAutorotate
|
|
|
{
|
|
|
- UIViewController *viewControllerToAsk = [self viewControllerForStatusBarAndOrientationProperties];
|
|
|
+ UIViewController *viewControllerToAsk = [self viewControllerForRotationAndOrientation];
|
|
|
BOOL shouldAutorotate = YES;
|
|
|
if (viewControllerToAsk && viewControllerToAsk != self) {
|
|
|
shouldAutorotate = [viewControllerToAsk shouldAutorotate];
|
|
|
@@ -861,7 +811,7 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
|
|
|
- (void)resignKeyAndDismissViewControllerAnimated:(BOOL)animated completion:(void (^)(void))completion
|
|
|
{
|
|
|
[self.previousKeyWindow makeKeyWindow];
|
|
|
-
|
|
|
+ [[self.previousKeyWindow rootViewController] setNeedsStatusBarAppearanceUpdate];
|
|
|
self.previousKeyWindow = nil;
|
|
|
|
|
|
// Restore the status bar window's normal window level.
|