Навигационный контроллер Стиль прозрачной панели не работает - PullRequest
10 голосов
/ 23 октября 2008

Я использую контроллер навигации, и у меня установлен стиль:

navController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

Но когда я запускаю свою программу, навигационный контроллер выглядит так, как будто он поверх белого фона, а не моего фона. Когда я нажимаю контроллер, влево или вправо, весь мой вид, текущий, смещается к вершине точно на размер панели навигации. И именно там я вижу свой фон через панель контроллера навигации. Есть идеи? Когда мой barStyle установлен непрозрачным, все выглядит хорошо. Я думал о том, чтобы установить для моей рамки просмотра отрицательное значение y, но я думаю, что должен быть более элегантный способ.

Ответы [ 12 ]

10 голосов
/ 23 октября 2008

Я считаю, что UINavigationController предполагает, что рамки просмотра вашего контроллера не включают область под панелью навигации.

UIBarStyleBlackTranslucent чаще используется для UIToolbar, поэтому Apple, вероятно, не упростила его использование с UINavigationBar. Возможно, вам придется отказаться от UINavigationController или начать взламывать фреймы (осторожно с поворотами), если вы хотите надежно рендерить под полосой.

Кроме того, если вы намерены скрыть панель навигации через несколько секунд, у вас будет намного более легкое время, если вы заставите ее исчезнуть (как приложение "Фотографии") вместо того, чтобы пытаться скользить это (как Мобильное Сафари). Поверь мне в этом ... это заняло у меня много времени, чтобы выучить трудный путь.

7 голосов
/ 11 декабря 2012

Просто используйте прозрачное фоновое изображение и полупрозрачный = ДА, чтобы позволить контенту течь ниже полосы. Работает на iOS 5/6. Добавить в viewDidLoad.

self.navigationController.navigationBar.translucent = YES;
UIImage * backgroundImage = [UIImage imageNamed:@"spacer.gif"];
[self.navigationController.navigationBar setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:UIBarMetricsDefault];

Я прикрепил изображение spacer.gif, одно прозрачное изображение размером 1px x 1px.

spacer.gif

4 голосов
/ 29 августа 2012
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.169 green:0.373 blue:0.192 alpha:0.9];
self.navigationController.navigationBar.translucent = YES;

Примечание:

  1. Не используйте self.navigationBarStyle и self.navigationBarTintColor для изменения.
  2. Добавьте два последних утверждения к вашему viewDidLoad.
3 голосов
/ 20 мая 2010

Я столкнулся с этой же проблемой (в 3.1.3), и хотя вы не можете установить стиль панели после того, как навигационная панель уже настроена, вы МОЖЕТЕ установить значения tintColor и translucent в любое время:

    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = YES;

Создает панель 'blackTranslucent', я изменяю внешний вид панели навигации, когда помещаю определенные контроллеры представления в стек.

2 голосов
/ 24 октября 2008

У меня была такая же проблема, и я решил ее, сделав фон корневого вида таким же, как мой вид. Белая область за панелью навигации оказалась корневой.

1 голос
/ 09 ноября 2010

У меня была такая же проблема. Я решил!

ImageViewExtendController *detailImageController = [[ImageViewExtendController alloc] init];  
[detailImageController loadImage:url];
[self.navigationController pushViewController:detailImageController animated:YES];
1 голос
/ 20 октября 2010

попробуйте использовать это, может быть, это будет полезно.

_topToolBar.barStyle = UIBarStyleBlackTranslucent;
_topToolBar.alpha = 0.3;
1 голос
/ 28 октября 2008

Вам нужно установить barstyle в вашем файле info.plist, чтобы он корректно смещал все.

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

1 голос
/ 23 октября 2008

Контроллер навигации смещает систему координат всех своих подпредставлений, поэтому они рисуются ниже панели навигации.

Расширьте фрейм вашего вида в отрицательный домен y, чтобы он рисовался под панелью навигации.

0 голосов
/ 08 мая 2014

Изменение параметров расширения границ в дочерних viewControllers

Как, например, в редакторе xcode, перейдите к первому дочернему элементу viewcontroller и отмените настройки:

Extend Edges;
    Under Top Bars;
    Under Bottom Bars;
    Under Opaque Bars;

Таким образом, ваш дочерний ViewController не будет размещаться, начиная под строкой состояния контроллера навигации, ни на панели вкладок, ни на панелях инструментов

надеюсь, что это может кому-нибудь помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...