2016-05-03 2 views
7

Я читал много сообщений здесь и пробовал большинство упомянутых опций, но никто не исправил эту проблему для меня. У меня есть приложение, которое основано на контроллере панели вкладок. Каждая вкладка является UIViewController с панелью навигации вверху.Цветная панель состояния на TabBarController с NavigationBar не работает

Добавление этого кода в AppDelegate дает мне оранжевую панель навигации с белым текстом, но белую строку состояния с черным текстом.

[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]]; 
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; 

Чтения ответов на различных страницах предлагает добавить следующее Вида управления:

- (UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
} 

Тогда вызывающим это в виде ли нагрузка:

[self setNeedsStatusBarAppearanceUpdate]; 

Это заставляет меня Белый статус бар с белым текстом, как я могу теперь получить строку состояния, чтобы пойти оранжевым, чтобы соответствовать моей панели навигации?

Решение, упомянутое здесь https://stackoverflow.com/a/19513714/505457 для тех, кто использует контроллер навигации, не работает, я думаю, это потому, что мой главный контроллер является контроллером панели ввода.

Кто-нибудь сталкивался с этим раньше? Заранее благодарим за любые советы/предложения, которые у вас могут быть. Я могу предоставить пример приложения, если это необходимо, но, вероятно, так же быстро построить его с помощью шаблона панели вкладок, добавить панель навигации, а затем вставить в мои образцы кода.

Плазменный

+0

Я загрузил демонстрационный проект на свой веб-сервер. В AppDelegate.m Я добавил код для обоих предложений. Он в настоящее время оттеняет StatusBar темнее, чем NavigationBar, но вы можете раскомментировать код, чтобы попробовать другое предложение. http://plasma.ddns.net/StatusBar_Problems.zip – Plasma

+0

Я не мог попробовать, но вы можете установить цвет снова на виду, исчезнет. - (void) viewWillDisappear: (BOOL) анимированный {[[UINavigationBar появление] setBarTintColor: [UIColor orangeColor]]; [[UINavigationBar внешний вид] комплектTintColor: [UIColor whiteColor]]; [[Внешний вид UINavigationBar] setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor whiteColor]}];} – kocakmstf

ответ

0

Правильно, поэтому точка BSmith11, сделанная о добавлении навигационных контроллеров в панель вкладок, заставила меня задуматься.Таким образом, я сделал немного Googling и ответ на эту страницу, помогает много: Tab bar controller inside a uinavigationcontroller

Имея контроллер TabBar как rootViewController, вставка «NavigationController» между этим и обычным ViewController позволяет мне это сделать:

//Fix up the Navigation bar tint and set text colours to white 
[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]]; 
[[UINavigationBar appearance] setBackgroundColor:[UIColor orangeColor]]; 

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; 

//Also requires setting 'View controller-based status bar appearance' to NO in .plist 
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

Какой именно то, что я имел в своем распоряжении, и это дает мне цветную StatusBar и точно такой же цвет NavBar. Теперь, чтобы узнать, могу ли я добавить его в существующее приложение и не сломать все.

Плазма

1

Ну я имел почти такую ​​же проблему, так как IOS7, Но мое быстрое решение изменить все виды от первого, я ссылаюсь, чтобы настроить конфигурацию цветных полос в AppDelegate.m файл, я рекомендую использовать эту бесплатную фреймворк Nab Bar Color And Gradient очень прост в использовании, а также вы сможете установить красивый градиент на все ваши взгляды.

См. Примеры в проекте.

+0

Спасибо, это выглядит интересно, но я изо всех сил стараюсь заставить его работать с контроллером панели вкладок. Демонстрация хочет использовать NavigationController, и когда я пытаюсь реализовать его на контроллере табуляции, я либо теряю панель вкладок, либо получаю белую панель навигации и строку состояния. Я определенно буду исследовать, могу ли я интегрировать это в свой проект. – Plasma

1

Вы можете найти statusBar UIVIew по его названию и окрасить его. Добавьте этот метод к вашему AppDelegate.m и вызвать его из didFinishLaunchingWithOptions:

- (void)setStatusBarBackgroundColor:(UIColor *)color { 

    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; 

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { 
     statusBar.backgroundColor = color; 
    } 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

... 

    [self setStatusBarBackgroundColor:[UIColor orangeColor]]; 

... 

} 

Примечание: Есть приложения в магазине, которые используют этот метод. Так что это нормально с политикой Apple HIG.

+0

Спасибо за подробный ответ, который меня почти достает, он действительно оттеняет оранжевый статус. Однако, несмотря на то, что я пропускаю [UIColor orangeColor] как к StatusBar, так и к NavigationBar, строка состояния «оранжевый» темнее, чем NavigationBar. Хотя этого было бы достаточно, и я, вероятно, мог бы обойти его, я надеялся на однородный цвет, так что StatusBar становится единым с панелью навигации, если вы знаете, что я имею в виду? Немного нравится на Facebook, Instagram и Timehop. – Plasma

+0

Итак, попробуйте настроить тот же цвет, что и ваш NavigationBar self.navigationController.navigationBar.backgroundColor или [UIColor clearColor] –

+0

Я попытался: [[Внешний вид UINavigationBar] setBarTintColor: [UIColor orangeColor]]; [[UINavigationBar внешний вид] комплектBackgroundColor: [UIColor orangeColor]]; а ближе к оттенку все равно не то же самое. Если я использую clearColour, NavBar очень бледно-оранжевый. – Plasma

1

Как правило, вы не должны добавлять UINavigationBar в UIViewController. Вместо этого заполните UITabBarController будет UINavigationController s.

let firstViewController = FirstViewController(nibName: nil, bundle: nil) 
    let firstNavigationController = UINavigationController(rootViewController: firstViewController) 

    let secondViewController = SecondViewController(nibName: nil, bundle: nil) 
    let secondNavigationController = UINavigationController(rootViewController: secondViewController) 

    let navigationControllers = [ 
     firstNavigationController, 
     secondNavigationController 
    ] 

    yourTabBarController.setViewControllers(navigationControllers, animated: false) 

Тот же общий процесс применяется, если вы используете раскадровки.

+0

Я посмотрю на это, но я использую Obj C, и это выглядит как Swift-код? Макет приложения находится в приложении, которое уже было построено, и я ищу, чтобы он соответствовал цветному статусу и Navbar. Я использую StoryBoards, и я использую TabBar для навигации, а панель навигации больше как строку состояния, для которой вы находитесь, и добавьте дополнительные кнопки действий, если это необходимо. Я бы предпочел не переписывать всю навигацию приложения и переходы на вкладках только для этого. – Plasma

+0

Итак, я думаю, что я могу видеть, к чему вы клоните, я добавил ответ на основании того, что я нашел, но был проведен там на вашем посту. Поэтому, если кто-то еще не придумает способ сделать это без моего повторного использования всех моих советов по истории и т. Д., Тогда я награжу вас щедростью, потому что ваш ответ дал мне результат, который я хочу. – Plasma

Смежные вопросы