it-swarm.com.ru

Панель навигации показать/скрыть 

У меня есть приложение с панелью навигации, состоящей из 2 кнопок панели. Я хотел бы скрыть и показать эту панель навигации, когда пользователь дважды нажимает на экран.

Изначально панель навигации должна быть скрыта. Когда пользователь дважды нажимает на экран, на панели навигации должна появиться анимация, например, то, что можно увидеть в фотогалерее iPhone.

Как я могу сделать что-то это? Предложения всегда приветствуются.

149
iscavengers

Это не то, что может вписаться в несколько строк кода, но это один подход, который может работать для вас.

Чтобы скрыть панель навигации:

[[self navigationController] setNavigationBarHidden:YES animated:YES];

Чтобы показать это:

[[self navigationController] setNavigationBarHidden:NO animated:YES];

Документация для этого метода доступна здесь .

Чтобы прослушать «двойной щелчок» или двойное касание, создайте подкласс UIView и сделайте экземпляр этого подкласса свойством view контроллера представления.

В подклассе представления переопределите его метод -touchesEnded:withEvent: и посчитайте, сколько касаний вы получаете за определенный промежуток времени, измеряя время между двумя последовательными нажатиями, возможно, с помощью -timeIntervalSinceDate: . Или проверьте результат из [touch tapCount] .

Если вы получили два касания, ваше подклассное представление выдает NSNotification , которое ваш контроллер представления зарегистрировал для прослушивания. 

Когда ваш контроллер представления слышит уведомление, он запускает селектор, который либо скрывает, либо показывает панель навигации с использованием вышеупомянутого кода, в зависимости от текущего видимого состояния панели навигации, доступ к которому осуществляется посредством чтения свойства isHidden панели навигации.

ПРАВКА

Часть моего ответа для обработки событий касания, вероятно, полезна еще до iOS 3.1. Класс UIGestureRecognizer , вероятно, в наши дни является лучшим подходом для обработки двойных нажатий.

Правка 2

Swift способ скрыть панель навигации:

self.navigationController?.setNavigationBarHidden(true, animated: true)

Чтобы показать это:

self.navigationController?.setNavigationBarHidden(false, animated: true)
361
Alex Reynolds

Этот код поможет вам.

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] 
initWithTarget:self action:@selector(showHideNavbar:)];
[self.view addGestureRecognizer:tapGesture];

-(void) showHideNavbar:(id) sender 
{ 
// write code to show/hide nav bar here 
// check if the Navigation Bar is shown
if (self.navigationController.navigationBar.hidden == NO)
{
// hide the Navigation Bar
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
// if Navigation Bar is already hidden
else if (self.navigationController.navigationBar.hidden == YES)
{
// Show the Navigation Bar
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
17
Perjan Duro

Сначала прочтите раздел в Руководстве по программированию View Controller для iOS о «Принятии полноэкранного макета для представлений навигации» и раздел о том же для пользовательских представлений. Если вы пытаетесь сделать что-то вроде Photos.app, то вы, вероятно, используете представление с прокруткой. Обратите внимание на комментарий о том, что панели навигации автоматически добавляют вставку содержимого прокрутки в представление прокрутки, чтобы учесть высоту панели навигации (и строки состояния), поэтому необходимо сбросить свойство contentInset представления прокрутки обратно в ноль (UIEdgeInsetsZero) сразу после установка начального состояния панели навигации и до появления представления.

Затем, если у вас есть одно нажатие, которое переключает навигационную панель и/или строку состояния для отображения или скрытия, вам нужно сделать две вещи в вашем методе переключения. Первым кажется сохранить свойство contentOffset представления прокрутки перед изменением скрытого свойства NavigationBar и сразу после этого восстановить сохраненное значение в contentOffset. И второй, чтобы снова обнулить свойство contentInset до UIEdgeInsetsZero после изменения свойства navigationBarHidden. Кроме того, если вы переключаете строку состояния, вам необходимо изменить ее состояние перед изменением состояния панели навигации.

16
jclee

В Swift попробуйте это,

self.navigationController?.navigationBarHidden = true  //Hide
self.navigationController?.navigationBarHidden = false //Show

или же

self.navigationController?.setNavigationBarHidden(true, animated: true) //Hide
self.navigationController?.setNavigationBarHidden(false, animated: true) //SHow
9
Zaid Pathan

Чтобы скрыть панель навигации:

[self.navigationController setNavigationBarHidden:YES animated:YES];

Чтобы показать панель навигации:

[self.navigationController setNavigationBarHidden:NO animated:YES];
7
Jayprakash Dubey

Вот очень быстрое и простое решение:

self.navigationController.hidesBarsOnTap = YES;

Это будет работать на одно нажатие вместо двойного нажатия. Также это изменит поведение для контроллера навигации даже после нажатия или выталкивания текущего контроллера представления. 

Вы всегда можете изменить это поведение в вашем контроллере в пределах viewWillAppear: и viewWillDisappear: действия, если вы хотите установить поведение только для одного контроллера представления. 

Вот документация :

7
amayer171292591

Одним из способов может быть снятие флажка Видимость панели «Показывает панель навигации» в инспекторе атрибутов. Надеюсь, это кому-нибудь поможет.

 enter image description here

2
Avijit Nagare

В Swift 4.2 и Xcode 10

self.navigationController?.isNavigationBarHidden = true  //Hide
self.navigationController?.isNavigationBarHidden = false  //Show

Если вы не хотите отображать панель навигации только в 1-ом ВК, но хотите, чтобы она отображалась во втором VC слове

В вашем 1-м VC напишите этот код.

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.isNavigationBarHidden = true  //Hide
}

override func viewWillDisappear(_ animated: Bool) {
    self.navigationController?.isNavigationBarHidden = false  //Show
}
0
iOS

hidesBarsOnTap в свойстве UINavigationController позволяет справиться только с iOS8 SDK

https://developer.Apple.com/library/prerelease/ios/documentation/UIKit/Reference/UINavigationController_Class/#//Apple_ref/occ/instp/UINavigationController/hidesBarsOnTap

0
theiOSDude