Я делаю пользовательскую навигациюBar с цветом фона и размером шрифта. Кроме того, у меня есть кнопка меню справа. Для этого я сделал категорию под названиеммногоразовый UIBarButtonItem во всех контроллерах просмотра в Objective C
UINavigationController + Transparent.h
@interface UINavigationController (Transparent)
- (void)presentTransparentNavigationBar;
- (void)hideTransparentNavigationBar;
@end
UINavigationController + Transparent.m
#import "UINavigationController+Transparent.h"
@implementation UINavigationController (Transparent)
UIBarButtonItem *menuButton;
- (void)presentTransparentNavigationBar;
{
menuButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menu_icon"] style:UIBarButtonItemStylePlain target:self action:@selector(showMenu:)];
[menuButton setTintColor:[UIColor whiteColor]];
self.navigationItem.rightBarButtonItem = menuButton;
UIImage *backButtonImage = [UIImage imageNamed:@"back"];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:backButtonImage
forState:UIControlStateNormal];
backButton.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
[backButton addTarget:self
action:@selector(popViewController)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = backBarButtonItem;
[self.navigationBar setTranslucent:NO];
[self.navigationBar setShadowImage:[UIImage new]];
[self.navigationBar setBarTintColor:[UIColor wolfRed]];
[self.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:19.0] }];
[self setNavigationBarHidden:NO animated:NO];
}
- (void)hideTransparentNavigationBar
{
[self setNavigationBarHidden:YES animated:NO];
[self.navigationBar setBackgroundImage:[[UINavigationBar appearance] backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault];
[self.navigationBar setTranslucent:[[UINavigationBar appearance] isTranslucent]];
[self.navigationBar setShadowImage:[[UINavigationBar appearance] shadowImage]];
}
@end
в моих ViewControllers я называю
[self.navigationController presentTransparentNavigationBar];
или
[self.navigationController hideTransparentNavigationBar];
Проблема в том, что кнопка меню не видна, а кнопка возврата выглядит как стандартная кнопка синего цвета iOS. Спасибо за помощь!
это очень хороший ответ! Но как я могу использовать одну и ту же кнопку меню на каждом ViewController без копирования кода во всех представлениях? –
спасибо !! вам нужно использовать ту же логику в вашем методе AppDelegate didFinishLaunchingWithOptions – swiftBoy
Может ли инициализировать UINavigationViewController без определения rootviewController в appdelegate? –