Как сделать UINavigationBar прозрачным ? Хотя я хочу, чтобы пункты бара оставались видимыми.
235
Как сделать UINavigationBar прозрачным ? Хотя я хочу, чтобы пункты бара оставались видимыми.
Если кому-то интересно, как этого добиться в iOS 7+, вот решение (совместимо с iOS 6)
В Objective-C
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
В Swift 3 (iOS 10)
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
Свифт 2
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
Установка translucent
на YES
на панели навигации делает свое дело, из-за поведения, обсужденного в UINavigationBar
документации. Я сообщу здесь соответствующий фрагмент:
Если вы установите это свойство
YES
на панели навигации с непрозрачным пользовательским фоновым изображением, панель навигации применит к изображению непрозрачность системы менее 1,0.
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = nil; self.navigationController.navigationBar.translucent = NO;
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
В iOS5 вы можете сделать это, чтобы сделать панель навигации прозрачной:
источник
[[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
От IOS7:
источник
Для тех, кто хочет сделать это в Swift 2.x:
или Swift 3.x:
источник
Это похоже на работу:
источник
-drawRect:
в собственном подклассе, а не в категории, а затем использовать этот подкласс в качестве панели навигации.После того, как все остальные сказали выше, то есть:
... моя панель навигации была все еще белой . Поэтому я добавил эту строку:
... и вуаля! Это, казалось, сделало трюк.
источник
Если вы соберете последнюю бета-версию iOS 13.4 и XCode 11.4, принятый ответ больше не будет работать. Я нашел другой способ, может быть, это просто ошибка в бета-версии программного обеспечения, но я пишу это там, на всякий случай
(быстро 5)
источник
Я знаю, что эта тема старая, но если люди хотят знать, как это делается, не перегружая метод drawRect.
Это то, что вам нужно:
источник
Приведенный ниже код расширяет верхний ответ, выбранный для этой темы, чтобы избавиться от нижней границы и установить цвет текста:
Последние две кодированные строки этого кода устанавливают прозрачность. Я позаимствовал этот код из этого потока, и он работал отлично!
Свойство «clipsToBounds» было кодом, который я нашел, который избавился от нижней границы с помощью ИЛИ без установленной прозрачности (так что если вы решите использовать сплошной белый / черный / и т. Д. Фон, границы все равно не будет).
Линия "tintColor" (2-я кодированная линия) установила для моей кнопки возврата светло-серый цвет
Я сохранил barTintColor в качестве резервной копии. Я не знаю, почему прозрачность не будет работать, но если это не так, я хочу, чтобы мой BG белый, как раньше
источник
для Swift 3.0:
источник
C # / Xamarin Solution
источник
Попробуйте следующий фрагмент кода:
источник
Другой способ, который сработал для меня, - это создать подкласс UINavigationBar и оставить метод drawRect пустым !!
источник
В Swift 4.2
(в viewWillAppear), а затем в viewWillDisappear, чтобы отменить его, поместите
источник
Вы имеете в виду полностью прозрачный или использующий полупрозрачно-черный стиль, который можно увидеть в приложении Photos? Последнее вы можете сделать, установив его
barStyle
свойство вUIBarStyleBlackTranslucent
. Бывший ... я не уверен в этом. Если вы хотите, чтобы элементы на нем все еще были видны, вам, возможно, придется покопаться в иерархии представлений панели и удалить представление, содержащее его фон.источник
Это работает для Swift 2.0.
источник
Проверьте RRViewControllerExtension , которое предназначено для управления внешним видом UINavigation bar.
с RRViewControllerExtension в вашем проекте, вам просто нужно переопределить
у вас viewcontroller.
источник
источник