2008-10-23 3 views
9

Я использую навигационный контроллер, и я стиль установлен:Навигационный контроллер Прозрачный Бар Стиль не работает

navController.navigationBar.barStyle = UIBarStyleBlackTranslucent; 

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

ответ

9

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

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

Кроме того, если вы намереваетесь скрыть навигационную панель через несколько секунд, у вас будет более легкое время, если вы затушите его (например, приложение «Фото») вместо того, чтобы пытаться сдвинуть его вверх (как Mobile Safari). Поверьте мне, что это ... я взял у меня лот времени, чтобы узнать трудный путь.

+1

Это не относится к iOS 5 и 6. Посмотрите мой ответ ниже с прозрачным изображением и полупрозрачным = YES, который позволяет потоку содержимого под панелью. – Resh32 2012-12-11 10:31:05

1

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

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

+0

Пробовал это, не повезло. Я продолжу тестирование, так как это кажется очевидным. – carlos 2008-10-23 06:35:16

+0

Это не работает, потому что UINavigationController * действительно * хочет управлять размером представлений, которыми он управляет сам по себе, поэтому он имеет тенденцию к сбросу кадров по своему усмотрению. Вы можете попробовать сбросить рамку просмотра, которое вы намереваетесь переместиться под * после *, этот вид отображается на экране, но ваш пробег мая может. – rpj 2008-10-23 17:04:06

0

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

К сожалению, это также не сдвигает ваше представление под строкой состояния. Грустно, похоже, вам нужно реализовать свою собственную версию UINavigationController. К счастью, это не так уж плохо, так как UINavigationBar довольно многоразовый.

+0

Ну, может быть, решение в том, что реализовать мою собственную версию. – carlos 2008-10-23 17:12:43

2

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

1

Вам необходимо установить штрих-код в файле info.plist, чтобы он полностью компенсировал все.

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

3

Я столкнулся с этой же проблемой (3.1.3) и в то время как вы не можете установить стиль бар после того, как Панель навигации уже настроен вы можете установить tintColor и полупрозрачные значения, если вам нравится:

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

Создает бар «blackTranslucent», я меняю вид навигации, когда я нажимаю определенные контроллеры представлений в стек.

1

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

_topToolBar.barStyle = UIBarStyleBlackTranslucent; 
_topToolBar.alpha = 0.3; 
1

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

ImageViewExtendController *detailImageController = [[ImageViewExtendController alloc] init]; 
[detailImageController loadImage:url]; 
[self.navigationController pushViewController:detailImageController animated:YES]; 
0

Попробуйте это:

self.tabBarController.tabBar.superview.backgroundColor = [UIColor blackColor]; 
4
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.
7

Просто используйте прозрачное фоновое изображение и полупрозрачный = ДА, чтобы содержимое могло течь под панелью. Работает на 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

0

Изменения Расширения возможностей кромок в детских viewControllers

Как, например, в редакторе Xcode, перейдите на первый ViewController ребенок и снят с охраной опции:

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

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

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

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