Обмен всеми моими находками.
режим Пожаловаться на
Честно говоря, я чувствую себя наполовину обозленный/как манекен, который я должен был бороться хороший день, чтобы реализовать простую вещь, существующую в Apple App.
режим Пожаловаться выключен
Прежде всего здесь некоторый контекст. Я работаю с navigationBar, которые предоставляются navigationController (только с отдельными барами, которые вручную сброшены на ваш взгляд)
Существует несколько подходов, которые я нашел. Я упоминаю все из них (даже если бы я не имел успеха, используя их)
1) анимировать изменение альфа Панель навигации
UIView.animateWithDuration(0.1, animations: {
navigationController?.navigationBar.alpha = 0
}, completion: nil)
@rmaddy упоминается здесь, что он работает для него. Тем не менее, я считаю, что у него есть отдельный бар (против бара, управляемого навигационным контроллером).
Я использовал инструмент Reveal, чтобы проверить иерархию пользовательского интерфейса и найти пару вещей. - Существует скрытая навигационная панель (и navigationController?.navigationBar
ссылается на нее). Таким образом, вы можете изменить альфу в ваших сердцах, но эти изменения не будут видны.
Существует, однако, другой navigationBar. Я предполагаю, что на него ссылаются некоторые частные члены navigationController (назовем его private navigationBar). Это видно, и это то, что отображается в верхней части вашего представления.
2) Использование setNavigationBarHidden: анимированные:
Это стандартный способ, чтобы скрыть/показать панель навигации. Он анимирован по-другому (он скользит/вверх и вниз). Однако, если это нормально для вас, просто пойдите с этим, потому что это просто и чисто.
navigationController?.setNavigationBarHidden(true, animated: true)
Кроме того, вы можете обернуть его в UIView.beginAnimations, UIView.commitAnimations оживить его вместе с некоторыми другими вещами (чтобы сделать ее более гладкой)
3) анимировать изменение альфа частной навигационной панели.
Это работает для меня:
let privateNavigationBar = self.superview?.superview?.superview?.superview?.superview?.superview?.subviews[1]
UIView.animateWithDuration(0.1, animations: {
privateNavigationBar.alpha = 0
}, completion: nil)
Я иду путь вверх по иерархии, чтобы получить вид, который содержит частную Панель навигацию (которая является второй подтаблицей для этой точки зрения).
Однако этот подход имеет несколько недостатков:
- Я считаю, # из superviews? зависит от вашей иерархии приложений (кроме того, вы используете разделенное представление и т. д.). Я думаю, вы можете обобщить или, может быть, просто пройти всю иерархию, чтобы найти не скрытый
UINavigationBar
, чтобы решить эту проблему.
- У меня есть ощущение, что компания Apple может нахмуриться на этом (приложение не принимаются в AppStore)
4) Сделать прозрачным и Панель навигации установить фоновое изображение быть прозрачным и изменить альфа-канал на нем.
Я не могу найти, где я читал об этой идее. Было несколько упоминаний.
Apple example app, который показывает, как настроить NavigationBar, в том числе сделать его прозрачным.
Интересно, что это приложение работает для меня (панель навигации прозрачна в нем). Однако, когда я пробовал этот код в своем приложении, он не работал (я до сих пор не понял, что происходит с этим). Как обычно есть куча переменных (может быть что-то в Info.plist, они также подкласс NavigationController, также может быть что-то в иерархии видов)
5) Добавление автономного Панель навигации
Вы можете скрыть бар при условии by navigationController. Добавьте свой собственный в UIView, подключите его к @IBOutlet и используйте альфа-анимацию на нем (скорее всего, это тоже относится к @rmaddy).
Я проверил и это работа.
Этот подход используется в учебнике this.
Тем не менее, есть и обратная сторона:
- Я считаю, что не будет обрабатывать также вращение, увеличение высоты STATUSBAR во время разговора или GPS
Каждый раз, когда я вижу код, как это (написано в статье) Я знаю, что будут проблемы с изменением размера: CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)
Вы можете заменить его ограничениями. Я пошел по этому пути, но наткнулся на некоторые проблемы.
6) Другие методы
я видел еще два метода. Я не знаю, будут ли они работать или что будет недостатки:
Один из них в этом вопросе: How to hide/show status bar and navigation bar by fading in/out at the same time like the Photos app in iOS 7?
И этот ответ: https://stackoverflow.com/a/18063898/422080
Что можно сказать о 'UINavigationController setNavigationBarHidden: анимированные:' метод ? – rmaddy
BTW - У меня есть приложение, которое анимирует свойство 'alpha'' navigationBar', и оно отлично работает. Не уверен, почему вы говорите, что он больше не работает. Попробуй. – rmaddy
@rmaddy Это показывает и скрывает панель навигации. Однако он использует различную анимацию. Он скользит по нему вверх и вниз (и исчезает) –