iPad SplitView меняет основной цвет панели навигации - PullRequest
4 голосов
/ 15 апреля 2010

Странная проблема: после поворота моего приложения в портретный режим, выбора элемента панели инструментов и открытия контроллера uipopover, если я поверну обратно в альбомную ориентацию, UINavigationController с правой стороны (objectAtIndex: 0 в SplitView) изменит цвет панели навигации , Я не уверен почему. Я установил его в Интерфейсном Разработчике как barStyle = UIBarStyleBlackOpaque;

Становится серебристым после возвращения в ландшафтный режим.

Это происходит только в том случае, если я поверну его в портретное положение, создам всплывающее окно и выберу что-то в контроллере навигации, который выдвигает другой tableViewController. Даже установка свойств в методе viewDidLoad ничего не делает.

У кого-нибудь есть идея?

Ответы [ 9 ]

7 голосов
/ 15 апреля 2010

viewDidLoad будет вызываться только при первом отображении вашего представления (или если оно очищено из-за проблем с памятью). Попробуйте переустановить barStyle в вашем viewWillAppear или даже - splitViewController: willShowViewController: invalidatingBarButtonItem:.

2 голосов
/ 08 декабря 2010

@ Брендан Дж. Лим и другие, у которых возникли проблемы с tintColor, наконец-то начали работать с пользовательской панелью навигации:

  1. Создание пользовательского навигационного файла с подклассами из UINavigationBar
@interface CustomNavigationBar : UINavigationBar 
{
}

@end
  1. В вашем файле реализации переопределите метод setTintColor
@implementation CustomNavigationBar

-(void)setTintColor:(UIColor *)tintColor
{
  [super setTintColor :[self tintColor]];
}

@end
  1. Откройте MainWindow.xib и выберите панель навигации, для которой вы хотите установить цвет. В вашей панели идентификации [Apple] [4] выберите CustomNavigationBar в качестве класса.

  2. На панели атрибутов [Apple] [1] установите цвет полосы.

Вот и все!

2 голосов
/ 29 ноября 2010

Кажется, есть проблема с 4.2 и установкой tintColor панели навигации после поворота. Вы можете правильно установить barStyle, используя ответы выше, но не tintColor. У кого-нибудь еще есть такая же проблема?

2 голосов
/ 29 ноября 2010

для Стива (обнаружение панели навигации PoPView или splitView RootViewControll) [IPAD splitview]

Вы должны создать метод класса (setLand: int i) в RootViewController, вызываемый из detailviewcontroller, в следующих методах:

- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
    // LANDSCAPE !!!!
    [RootViewController setLand:1];

и

- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc {
    // PORTRAIT!!
    [RootViewController setLand:0];

и на RootViewController:

    static int landscape=2;

    ...

// SetMethod for class variable landscape   
        + (void)setLand:(int)i 
        {
            if(landscape!=i){
                landscape = i;

            }
        }

и, наконец, всегда в RootViewController

 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     if(landscape == 1)
     {
       //LANDSCAPE!
       CUSTOM FOR LANDSCAPE
       self.navigationController.navigationBar.barStyle =...
     }
     else if(landscape == 0)
     {
       //PORTRAIT!
       CUSTOM FOR PORTRAIT
       self.navigationController.navigationBar.barStyle =...
     }
   }

.. это хорошо работает в моем приложении, редактируя пользовательский альбомный / книжный навигационный бар

1 голос
/ 04 января 2011

Подал отчет об ошибке об этом несколько недель назад, и Apple сказала, что это известная ошибка 4.2. Затем я спросил, есть ли способ исправить это, но ответа пока нет.

Также бесполезно заменять навигационную панель UIN подклассной / настраиваемой навигационной панелью. Похоже, что поповер выполняет некоторые секретные неприятные вещи на панели UINavigatioBar, которая убивает tintColor и не позволяет сбросить его (он всегда будет оставаться «ноль», даже после сброса).

Я в основном сдался и сказал клиенту, что ему придется жить с ним, пока не выйдет следующее обновление (надеюсь).

1 голос
/ 07 декабря 2010

Эта проблема исправлена использовал следующий код

@implementation ChangeNavigationBarColor

- (void) setTintColor:(UIColor*)color
{
    [super setTintColor:[[BrandingManager sharedBrandingManager] tintColorForNavigationController]];
}


@interface ChangeNavigationBarColor : UINavigationBar {

}

@end
1 голос
/ 05 ноября 2010

У меня такая же проблема, но сброс barStyle в viewWillAppear вызывает другую проблему. Установка этого параметра также устанавливает его, когда он отображается во всплывающем окне, поэтому он больше не соответствует цвету всплывающего окна. Как я могу установить barStyle на то, что я хочу, только когда он отображается на левой панели контроллера разделенного вида? Я думаю, что я мог бы установить его в поле зрения, появится только тогда, когда ориентация ландшафта, но это кажется грязным. Кроме того, установка его в splitViewController: willShowViewController: invalidatingBarButtonItem: не работает вообще, так как я думаю, что он вызывается до того, как контроллер представления разделения устанавливает стили по умолчанию. Это похоже на действительно глупую ошибку со стороны яблока. Он должен изменить его на прежний стиль, а не стиль по умолчанию.

1 голос
/ 28 июня 2010

Круто, исправил.

Добавлено в мой RootViewController, где объявлен контроллер splitview и панель навигации:

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:YES];


    self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;

}
0 голосов
/ 14 сентября 2011

Вы можете использовать отдельный класс для изменения цвета, сделать цвет фона этим классом, вашим желаемым цветом, а затем использовать этот класс в качестве класса вашего rootViewController. Я сделал, это работает.

...