Как создать пользовательскую панель навигации, например, приложение BestBuy?

Я хочу создать настраиваемую панель навигации, как в приложении BestBuy, или как показано на приведенном ниже скриншоте.

enter image description here

Я хочу, чтобы этот тип навигации всегда находился на вершине каждого viewController.

Если кто-нибудь может сказать мне, что процедура или любая помощь будут оценены. Благодарю.

6
они, вероятно, не .. Я согласен. мой ответ слишком завышен для этого .. он наиболее гибкий, но код азиза выглядит лучше всего для ЭТО, я думаю. .. хотя я не знаю о разделителях фона
добавлено автор Daij-Djan, источник
Я не думаю, что они используют настраиваемую панель навигации ... это просто изображение :)
добавлено автор NSCry, источник

2 ответы

напишите подкласс UINavigationBar, в котором вы делаете пользовательский чертеж и добавляете subviews по мере необходимости.

then tell your navigationController to use that class by initing it using initWithNavigationBarClass:toolBarClass:

например

@interface MyBar : UINavigationBar
@end

@implementation MyBar 
.... //like any UIView
@end

UINavigationController *navi = [[UINavigationController alloc] initWithNavigationBarClass:[MyBar class] toolbarClass:nil];

instead of initWithRootViewController


Образец

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    self.mainViewController = [[FDMainViewController alloc] initWithNibName:@"FDMainViewController_iPhone" bundle:nil];
} else {
    self.mainViewController = [[FDMainViewController alloc] initWithNibName:@"FDMainViewController_iPad" bundle:nil];
}

UINavigationController *navi = [[UINavigationController alloc] initWithNavigationBarClass:[UINavigationBar class] toolbarClass:nil];
navi.viewControllers = @[self.mainViewController];
self.window.rootViewController = navi;
[self.window makeKeyAndVisible];
return YES;
}
11
добавлено
Как сказать navigationController использовать этот класс?
добавлено автор Rajan Balana, источник
Тогда как я установлю корневой контроллер?
добавлено автор Rajan Balana, источник
Я не понял концепцию толчка не анимированных. Правильно ли это?
добавлено автор Rajan Balana, источник
Не работает !! Панель навигации черная! self.navigationController.navigationBar.tintColor = [UIColor redColor]; Цвет не меняется!
добавлено автор Rajan Balana, источник
добавлено автор Rajan Balana, источник
просмотреть отредактированный ответ
добавлено автор Daij-Djan, источник
нажмите его не анимированные или установите navi.viewControllers = @ [rootVC]
добавлено автор Daij-Djan, источник
отредактирован снова, чтобы показать начало навигации
добавлено автор Daij-Djan, источник

navigationBar может принимать три вида, две кнопки в каждой стороне влево и вправо, также вы можете добавить представление для заголовка,

//this will set a background image to your navigation bar.
[[self.navigationController navigationBar] setBackgroundImage:[UIImage imageNamed:@"top-bar.png"] forBarMetrics:UIBarMetricsDefault];

UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom];
[leftButton setBackgroundImage:[UIImage imageNamed:@"backBtn.png"] forState:UIControlStateNormal];
leftButton.frame = CGRectMake(0, 0, 66, 30);
[leftButton addTarget:self action:@selector(navBack) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton];

UIImage *image=[UIImage imageNamed:@"add-btn.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.bounds = CGRectMake( 0, 0, image.size.width, image.size.height);
[button setBackgroundImage:image forState:UIControlStateNormal];
[button addTarget:self action:@selector(doneAct) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];

и добавить строку поиска

self.navigationItem.titleView = mySearchbarView;
4
добавлено
да, если вам не нужны разделители, например ... хотя они могут быть в фоновом изображении .. это работает в большинстве случаев
добавлено автор Daij-Djan, источник
спасибо, не видел этого ..
добавлено автор Daij-Djan, источник
конечно, но тогда кнопка не будет подсвечена при прикосновении, ваш ответ будет лучше.
добавлено автор Aziz, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.