From 60cac9fa8bf87632e82270a0266b9ad4e41103d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gruber=20Kristo=CC=81f?= Date: Fri, 30 Mar 2018 20:18:58 +0200 Subject: [PATCH] Support for black navigation bar style and landscape orientations --- Pod/Classes/GKFadeNavigationController.m | 38 ++++++++++++++++++++++-- README.md | 3 +- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Pod/Classes/GKFadeNavigationController.m b/Pod/Classes/GKFadeNavigationController.m index 45db871..4f35e26 100644 --- a/Pod/Classes/GKFadeNavigationController.m +++ b/Pod/Classes/GKFadeNavigationController.m @@ -14,7 +14,6 @@ @interface GKFadeNavigationController () @property (nonatomic, strong) UIVisualEffectView *visualEffectView; -@property (nonatomic, strong) UIView *fakeNavigationBarBackground; @property (nonatomic) GKFadeNavigationControllerNavigationBarVisibility navigationBarVisibility; @property (nonatomic, strong) UIColor *originalTintColor; @@ -39,6 +38,13 @@ - (void)viewDidLoad { [self updateNavigationBarVisibilityForController:self.topViewController animated:NO]; } +- (void)viewDidLayoutSubviews { + CGFloat navigationBarHeight = CGRectGetHeight(self.navigationBar.frame); + CGFloat statusBarHeight = [self statusBarHeight]; + + self.visualEffectView.frame = CGRectMake(0, -statusBarHeight, self.view.frame.size.width, navigationBarHeight+statusBarHeight); +} + #pragma mark - Accessors - (void)setNavigationBarVisibility:(GKFadeNavigationControllerNavigationBarVisibility)navigationBarVisibility { @@ -123,7 +129,11 @@ - (UIVisualEffectView *)visualEffectView { if (!_visualEffectView) { // Create a the fake navigation bar background UIVisualEffect *blurEffect; - blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]; + if ([self isNavigationStyleBlack]) { + blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + } else { + blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]; + } CGFloat navigationBarHeight = CGRectGetHeight(self.navigationBar.frame); CGFloat statusBarHeight = [self statusBarHeight]; @@ -163,7 +173,11 @@ - (UIStatusBarStyle)preferredStatusBarStyle { if (self.navigationBarVisibility == GKFadeNavigationControllerNavigationBarVisibilityHidden) { return UIStatusBarStyleLightContent; } else { - return UIStatusBarStyleDefault; + if ([self isNavigationStyleBlack]) { + return UIStatusBarStyleLightContent; + } else { + return UIStatusBarStyleDefault; + } } } @@ -243,10 +257,16 @@ - (void)showCustomNavigationBar:(BOOL)show withFadeAnimation:(BOOL)animated { self.visualEffectView.alpha = 1; self.navigationBar.tintColor = [self originalTintColor]; [self.navigationBar setTitleVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; + [self.navigationBar setTitleVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefaultPrompt]; + [self.navigationBar setTitleVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsCompact]; + [self.navigationBar setTitleVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsCompactPrompt]; } else { self.visualEffectView.alpha = 0; self.navigationBar.tintColor = [UIColor whiteColor]; [self.navigationBar setTitleVerticalPositionAdjustment:-500 forBarMetrics:UIBarMetricsDefault]; + [self.navigationBar setTitleVerticalPositionAdjustment:-500 forBarMetrics:UIBarMetricsDefaultPrompt]; + [self.navigationBar setTitleVerticalPositionAdjustment:-500 forBarMetrics:UIBarMetricsCompact]; + [self.navigationBar setTitleVerticalPositionAdjustment:-500 forBarMetrics:UIBarMetricsCompactPrompt]; } } completion:^(BOOL finished) { [self setNeedsStatusBarAppearanceUpdate]; @@ -277,4 +297,16 @@ - (void)setNeedsNavigationBarVisibilityUpdateAnimated:(BOOL)animated { } } +#pragma mark - Helper + +- (BOOL)isNavigationStyleBlack { + if (self.navigationBar.barStyle == UIBarStyleBlackTranslucent || + self.navigationBar.barStyle == UIBarStyleBlack || + self.navigationBar.barStyle == UIBarStyleBlackOpaque) { + return YES; + } else { + return NO; + } +} + @end diff --git a/README.md b/README.md index 3c607a1..68872c8 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ This is an example implementation of a `UINavigationController` with support of - Native looking translucent header - Demo project with elastic header image - iPhone X support +- Black navigation bar style support ## Installation @@ -52,8 +53,6 @@ Works fine with iOS 11. ## Known limitations -- Does not handle screen rotation fully -- Supports only light navigation bar style out of the box - Items under the header are not clickable - Changing the status bar color happens in `-viewDidAppear` currently