Как изменить внешний вид UINavigationBar, если он уже настроен - PullRequest
3 голосов
/ 17 января 2012

В приложении-делегате в моем приложении я вызываю следующий метод:

- (void)customizeAppearance 
{
    UIImage *gradientPortrait = [[UIImage imageNamed:@"gradient_portrait"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

    UIImage *gradientLandscape = [[UIImage imageNamed:@"gradient_landscape"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

    [[UINavigationBar appearance] setBackgroundImage:gradientPortrait 
        forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setBackgroundImage:gradientLandscape 
        forBarMetrics:UIBarMetricsLandscapePhone];
}

Этот код позволяет настроить все панели навигации в приложении. Каждая полоса становится зеленой, поскольку изображение, которое я использую, зеленое.

Теперь моя цель - переопределить вышеуказанную конфигурацию для конкретной панели навигации. В частности, в течение жизненного цикла приложения я открываю модальный контроллер, используя стиль презентации UIModalPresentationFormSheet. Этот контроллер представлен в пределах UINavigationController. Поскольку мне нужно также отобразить панель навигации, прикрепленную к этому UINavigationController, я хотел бы знать, как можно настроить эту панель, не изменяя глобальную конфигурацию, заданную в делегате приложения.

Я пытался установить свойство tintColor панели навигации (представленное в модальном виде) на [UIColor blackColor] и barStyle на UIBarStyleBlack, но они не работают. Затронуты только предметы со штангой.

Заранее спасибо.

P.S. Я использую iOS 5

Ответы [ 2 ]

4 голосов
/ 22 января 2012

Прежде всего, если вы не против растягивания изображения, вам не нужно использовать метод resizableImageWithCapInsets: UIEdgeInsetsMake (0, 0, 0, 0).

UIImage *gradientPortrait = [UIImage imageNamed:@"gradient_portrait"];
UIImage *gradientLandscape = [UIImage imageNamed:@"gradient_landscape"];

UIImage *someOtherImage = [UIImage imageNamed:@"someOtherImageName"];

Затем, чтобы достичьчто вы хотите:

  1. Убедитесь, что подкласс ViewController включен с пользовательской панелью навигации.
  2. Используйте следующее, чтобы добавить изображение по умолчанию ко всем панелям навигации

    [[UINavigationBar appearance] setBackgroundImage:gradientPortrait forBarMetrics:UIBarMetricsDefault];
    
  3. Используйте следующее, чтобы добавить конкретное изображение к панелям навигации, которые будут отображаться над подклассами ViewControllers

    [[UINavigationBar appearanceWhenContainedIn:[YOURSUBCLASS class], nil] setBackgroundImage:someOtherImage forBarMetrics:UIBarMetricsDefault];
    

(вы можете позвонитьэти методы откуда-то из вашего приложения делегата)

Кстати, если вы просто хотите изменить цвет оттенка, вы можете просто использовать свойство tintColor вместо всех изображений.

для получения дополнительной информации проверьтеразделы внешнего вида: Ссылка на класс UINavigationBar

0 голосов
/ 14 июня 2013

Подкласс UINavigationBar с вашим пользовательским классом и другой вид на нем.Затем используйте свой пользовательский класс в том конкретном месте, где вам нужно выглядеть по-другому.

...