У меня есть приложение, которому иногда нужна навигационная панель, чтобы гармонировать с контентом.
Кто-нибудь знает, как избавиться или изменить цвет этой надоедливой маленькой планки?
На изображении ниже ситуация у меня есть - я говорю об этой линии высоты 1px ниже "Root View Controller"
ios
objective-c
swift
ipad
uinavigationbar
Шимон Кучур
источник
источник
Ответы:
Для iOS 13:
Используйте
.shadowColor
собственностьНапример:
Для iOS 12 и ниже:
Для этого вам необходимо установить собственное теневое изображение. Но для отображения теневого изображения вам также необходимо установить собственное фоновое изображение, цитата из документации Apple:
Так:
Выше - единственный «официальный» способ скрыть это. К сожалению, это устраняет прозрачность бара.
Я не хочу фоновое изображение, просто цвет
У вас есть эти варианты:
Сплошной цвет, нет прозрачности:
Создайте небольшое фоновое изображение, заполненное цветом и используйте его.
Используйте «хакерский» метод, описанный ниже. Это также будет держать бар прозрачным.
Как сохранить бар прозрачным?
Чтобы сохранить прозрачность, вам нужен другой подход, он выглядит как хак, но работает хорошо. Тень, которую мы пытаемся удалить, это
UIImageView
где-то линия волосUINavigationBar
. Мы можем найти его и спрятать / показать, когда это необходимо.Инструкции ниже предполагают, что вам нужно скрыть волосковую линию только в одном контроллере вашего
UINavigationController
иерархии.Объявите переменную экземпляра:
Добавить метод, который находит эту тень (линия роста волос)
UIImageView:
Добавить / редактировать
viewWillAppear/viewWillDisappear
методы:Тот же метод должен также работать для
UISearchBar
волосяного покрова и (почти) всего, что вам нужно скрыть :)Большое спасибо @Leo Natan за оригинальную идею!
источник
UINavigationBar
собственности:clipsToBounds = YES
clipsToBounds = YES
работает как шарм! Спасибо!viewWillAppear
вызывается, мы не можем получитьshadowImageView
Ниже может помочь просто!
Swift:
Цель C:
источник
Если вы просто хотите использовать сплошной цвет панели навигации и настроили это в своей раскадровке, используйте этот код в своем
AppDelegate
классе, чтобы удалить границу в 1 пиксель через прокси внешнего вида:источник
Попробуй это:
Ниже изображение имеет объяснение (iOS7 NavigationBar):
И проверьте этот вопрос так: iOS7 - изменить цвет границы UINavigationBar
источник
Хотел добавить версию ответа Сергея Свифта. Я создал
UIBarExtension.swift
со следующим:источник
Быстрый способ сделать это:
источник
Простое решение в быстром
источник
Изучив ответ от Serhil, я создал модуль UINavigationBar + Addition, который легко скрывает линию волос.
источник
В Swift 3.0
Отредактируйте ваш
AppDelegate.swift
, добавив следующий код в вашу функцию приложения:источник
Начиная с iOS 13 есть системный API для установки или удаления тени.
https://developer.apple.com/documentation/uikit/uibarappearance/3198009-shadowimage
источник
UINavigationBarAppearance
заголовках !! Я бы никогда не нашел это. Спасибо, это решило мои проблемы на 100%Может также быть скрыт от раскадровки (работает на Xcode 10.1)
Добавив атрибут времени выполнения: hidesShadow - Boolean - True
источник
Решение pxpgraphics обновлено для Swift 2.0
источник
UINavigationController().navigationBar/toolbar.hide/showBottomHairline()
то нет? Я пытаюсь это, но безрезультатно. Я не правильно понимаю?Swift 4 // для скрытия навигационной панели тени линии
источник
Я использую расширение UINavigationBar, которое позволяет мне скрывать / показывать эту тень с помощью UIAppearance API или выбирать, какая панель навигации должна скрывать / показывать эту тень, используя раскадровку (или исходный код). Вот расширение:
Теперь, чтобы отключить тень на всех панелях навигации, вы должны использовать:
Или вы можете включить / отключить это поведение, используя раскадровки:
источник
flatAssociatedObjectKey
как уникальный int (трактуется как указатель) для идентификации вашего связанного объекта. Здесь определяется адрес памяти приватной переменной. Я обновил ответ, чтобы добавить эту вар. Смотрите nshipster.com/associated-objects для получения дополнительной информации.translucent
значение falseSwift 4 проверено решение одной линии
В
Viewdidload()
поле «Установить значение по умолчанию для пользователя Navigation controller true» для ключа «hidesShadow»источник
Свифт поставь это
в
источник
Другой вариант, если вы хотите сохранить прозрачность и не хотите создавать подклассы в каждом
UINavigationController
приложении:источник
источник
Решение в Swift 4.2:
Просто поместите эту функцию в первый Viewcontroller и вызовите ее в
viewdidload
источник
В iOS8, если вы установите
UINavigationBar.barStyle
на.Black
вы можете установить фон панели в простой цвет без рамки.В Свифте:
источник
Решение двух линий, которое работает для меня. Попробуйте добавить это в метод ViewDidLoad:
источник
Вот очень простое решение:
источник
Простое решение - Swift 5
Создать расширение:
Добавьте это к
viewDidLoad()
:источник
Для пользователей iOS 9 это работало для меня. просто добавьте это:
источник
Проблема с настройкой фонового изображения заключается в том, что он удаляет размытие. Вы можете удалить его, не устанавливая фоновое изображение. Смотрите мой ответ здесь .
источник
Вы должны добавить представление в нижней части UISearchBar
источник
Я знаю, что это старая ветка, но я нашел решение, которое работает очень хорошо:
Подкласс UINavigationBar. В вашем подклассе UINavigationBar переопределите didAddSubview с помощью следующего кода:
источник
Я только что создал расширение для этого ... Извините за форматирование (это мой первый ответ).
Применение:
Расширение:
источник
В AppDelegate это глобально изменило формат NavBar:
Не удалось реализовать что-то другое на конкретном VC, но это поможет 90% людей
источник
источник