Подтвердить что ты не робот

Показать/скрыть навигациюБар, когда представление перетаскивается в iOS 8

Привет, коллеги-разработчики,

Я удивлен, что я не нашел никакой информации об этом конкретном случае использования для iOS 8. Позвольте мне объяснить, у меня есть стек контроллера навигации, первое представление имеет скрытую навигацию, когда пользователь нажимает на ячейку новый вид нажат, и мне нужно, чтобы панель навигации, показанная на этом представлении, возвращалась (очевидно). На iOS 7 это просто вопрос добавления этой строки в viewWillAppear:

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

И это работает как шарм. Но с IOS 8 я изо всех сил стараюсь иметь такое же поведение. На данный момент мне удалось сделать то же самое, используя:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
        [self.navigationController setNavigationBarHidden:NO animated:NO];
}
- (void)viewDidLoad {
     [super viewDidLoad];
     if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
         self.automaticallyAdjustsScrollViewInsets = NO;
         self.edgesForExtendedLayout = UIRectEdgeNone;
         self.collectionView.contentInset = UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height, 0, 0, 0);
}    }

И изменение содержимогоИнтеллекция моих коллекцийView/tableviews, что мне нужно отображать. Он будет работать, но это настоящая боль в * (иногда вставка содержимого не требуется, если пользователь приходит из нового диспетчера представлений).

Для контекста проект был впервые разработан для обработки iOS 6 и 7, поэтому никакой раскадровки не делается программно. Я портировал приложение на более современную кодовую базу и сделал ее универсальной.

Я что-то упустил? Есть ли лучший способ справиться с этим в iOS 7/8?

4b9b3361

Ответ 1

Вы хотите скрыть его в viewWillAppear и снова показать его в viewWillDisappear

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.isHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.navigationBar.isHidden = false
}

Ответ 2

Я думал, что строка:

self.navigationController.navigationBar.hidden = YES;

Я проверяю его, и он отлично работает для меня., Попробуй.,.

Ответ 3

Сделайте это анимированным, чтобы получить плавный переход:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

Ответ 4

В iOS 8 кажется, что navigationBarHidden не совпадает с navigationBar.hidden. (Я создаю цель развертывания iOS 6 - не уверен, что это имеет значение).

В моем коде, глядя на отладчик со следующими последовательными строками:

bool b1 = self.navigationController.navigationBarHidden; // FALSE

bool b2 = self.navigationController.navigationBar.hidden; // TRUE

b1 отображается как false и b2 как истина.

Настройка self.navigationController.navigationBar.hidden = false решает проблему

Ответ 5

У меня была такая же проблема, и я действительно пробовал все, но панель навигации не отображалась. Наконец, я понял, что у меня есть этот код в моем первом контроллере представления: -)

[self.navigationController setNavigationBarHidden:YES];

Я подумал, кто-то другой, который проверяет этот вопрос, допустил мою ошибку, поэтому я подумал, что это может стоить упоминать.