123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #import "UINavigationController+RNNOptions.h"
- #import "RNNFontAttributesCreator.h"
- #import "UIImage+tint.h"
-
- const NSInteger BLUR_TOPBAR_TAG = 78264802;
-
- @implementation UINavigationController (RNNOptions)
-
- - (void)rnn_setInteractivePopGestureEnabled:(BOOL)enabled {
- self.interactivePopGestureRecognizer.enabled = enabled;
- }
-
- - (void)rnn_setRootBackgroundImage:(UIImage *)backgroundImage {
- UIImageView* backgroundImageView = (self.view.subviews.count > 0) ? self.view.subviews[0] : nil;
- if (![backgroundImageView isKindOfClass:[UIImageView class]]) {
- backgroundImageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
- [self.view insertSubview:backgroundImageView atIndex:0];
- }
-
- backgroundImageView.layer.masksToBounds = YES;
- backgroundImageView.image = backgroundImage;
- [backgroundImageView setContentMode:UIViewContentModeScaleAspectFill];
- }
-
- - (void)rnn_setNavigationBarTestID:(NSString *)testID {
- self.navigationBar.accessibilityIdentifier = testID;
- }
-
- - (void)rnn_setNavigationBarVisible:(BOOL)visible animated:(BOOL)animated {
- [self setNavigationBarHidden:!visible animated:animated];
- }
-
- - (void)rnn_hideBarsOnScroll:(BOOL)hideOnScroll {
- self.hidesBarsOnSwipe = hideOnScroll;
- }
-
- - (void)rnn_setNavigationBarNoBorder:(BOOL)noBorder {
- if (noBorder) {
- self.navigationBar
- .shadowImage = [[UIImage alloc] init];
- [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
- } else {
- self.navigationBar
- .shadowImage = nil;
- }
- }
-
- - (void)rnn_setBarStyle:(UIBarStyle)barStyle {
- self.navigationBar.barStyle = barStyle;
- }
-
- - (void)rnn_setNavigationBarFontFamily:(NSString *)fontFamily fontSize:(NSNumber *)fontSize color:(UIColor *)color {
- NSDictionary* fontAttributes = [RNNFontAttributesCreator createFontAttributesWithFontFamily:fontFamily fontSize:fontSize color:color];
-
- if (fontAttributes.allKeys.count > 0) {
- self.navigationBar.titleTextAttributes = fontAttributes;
- }
- }
-
- - (void)rnn_setNavigationBarLargeTitleVisible:(BOOL)visible {
- if (@available(iOS 11.0, *)) {
- if (visible){
- self.navigationBar.prefersLargeTitles = YES;
- } else {
- self.navigationBar.prefersLargeTitles = NO;
- }
- }
- }
-
- - (void)rnn_setNavigationBarLargeTitleFontFamily:(NSString *)fontFamily fontSize:(NSNumber *)fontSize color:(UIColor *)color {
- if (@available(iOS 11.0, *)) {
- NSDictionary* fontAttributes = [RNNFontAttributesCreator createFontAttributesWithFontFamily:fontFamily fontSize:fontSize color:color];
- self.navigationBar.largeTitleTextAttributes = fontAttributes;
- }
- }
-
- - (void)rnn_setNavigationBarTranslucent:(BOOL)translucent {
- self.navigationBar.translucent = translucent;
- }
-
- - (void)rnn_setNavigationBarBlur:(BOOL)blur {
- if (blur && ![self.navigationBar viewWithTag:BLUR_TOPBAR_TAG]) {
- [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
- self.navigationBar.shadowImage = [UIImage new];
- UIVisualEffectView *blur = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]];
- CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
- blur.frame = CGRectMake(0, -1 * statusBarFrame.size.height, self.navigationBar.frame.size.width, self.navigationBar.frame.size.height + statusBarFrame.size.height);
- blur.userInteractionEnabled = NO;
- blur.tag = BLUR_TOPBAR_TAG;
- [self.navigationBar insertSubview:blur atIndex:0];
- [self.navigationBar sendSubviewToBack:blur];
- } else {
- UIView *blur = [self.navigationBar viewWithTag:BLUR_TOPBAR_TAG];
- if (blur) {
- [self.navigationBar setBackgroundImage: nil forBarMetrics:UIBarMetricsDefault];
- self.navigationBar.shadowImage = nil;
- [blur removeFromSuperview];
- }
- }
- }
-
- - (void)rnn_setBackButtonIcon:(UIImage *)icon withColor:(UIColor *)color title:(NSString *)title {
- UIBarButtonItem *backItem = [[UIBarButtonItem alloc] init];
- if (icon) {
- backItem.image = color
- ? [[icon withTintColor:color] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
- : icon;
-
- [self.navigationBar setBackIndicatorImage:[UIImage new]];
- [self.navigationBar setBackIndicatorTransitionMaskImage:[UIImage new]];
- }
-
- UIViewController *lastViewControllerInStack = self.viewControllers.count > 1 ? [self.viewControllers objectAtIndex:self.viewControllers.count-2] : self.topViewController;
-
- backItem.title = title ? title : lastViewControllerInStack.navigationItem.title;
- backItem.tintColor = color;
-
- lastViewControllerInStack.navigationItem.backBarButtonItem = backItem;
- }
-
- - (void)rnn_setBackButtonColor:(UIColor *)color {
- self.navigationBar.tintColor = color;
- }
-
- - (void)rnn_setNavigationBarClipsToBounds:(BOOL)clipsToBounds {
- self.navigationBar.clipsToBounds = clipsToBounds;
- }
-
- @end
|