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

Автоматический макет и "Скрыть нижнюю панель при нажатии"

Мое приложение (упрощенная) структура:

UITabBarController с одним UINavigationController, содержащим UITableViewController в качестве контроллера корневого представления.

при нажатии одной из ячеек контроллера табличного представления я нажимаю обычный UIViewController (позволяет называть его VC), закрывая нижнюю панель вкладок. (используя флаг "Скрыть нижнюю планку при нажатии" )

В раскадровке я добавил регулярный подкласс UIView к VC, который выглядит как нижняя панель, и я использую Auto Layout, чтобы привязать его к нижней части представления VC.

Проблема
когда я нажимаю VC, для этого представления требуется вторая секунда, которая выглядит так, как автоматическая компоновка, выталкивает ее снизу, как будто панель вкладок не скрыта, и через секунду она распознает, что панель вкладок скрыта и перемещает ее к реальному дну представления.

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

4b9b3361

Ответ 1

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

enter image description here

Выберите ограничение и отредактируйте его свойство "Второй элемент"

enter image description here

Здесь вам нужно выбрать нижний

enter image description here

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

И именно по этой причине иерархия представлений должна быть снова изложена, что вызывает нежелательную анимацию.

Ответ 2

Принятый ответ не работал у меня (опция не была доступна). Однако я нашел другое решение. (на основе Скрыть нижнюю панель при нажатии на автоспуск)

Выберите стенд для представления и объекта для выравнивания (в моем случае btnShare) и добавьте новое ограничение выравнивания (нижние края).

введите описание изображения здесь введите описание изображения здесь

Ответ 3

Привет В раскадровке выберите панель вкладок ( "Панель управления вкладками" > "Панель управления вкладками" > "Панель вкладок" ), в инспекторе атрибутов снимите флажок "Прозрачный". Это действие устранит вашу проблему. (Но есть много вещей, "Скрыть нижнюю планку при нажатии" на панели инструментов).

Ответ 4

ЕСЛИ вы не можете выбрать нижнее нижнее дно в своем Xcode 7 +

like there просто выполните следующие действия: откройте свою раскадровку в редакторе исходного кода

открыть в редакторе найдите свой идентификатор контроллера

поиск в исходном файле найдите <layoutGuides>, введите <bottom>, скопируйте его id

find layoutGuides поиск по id изменить атрибут сверху вниз

найти и заменить наслаждаться.

Ответ 5

Выберите "Контроллер навигации", а в "Attribute Inspector" снимите галочку с "Under Bottom Bars".

Ответ 6

Если вы хотите, чтобы панель вкладок была скрыта, вы можете добавить этот код к своему контроллеру,

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden = YES;
}

Вам также нужно будет поместить этот код (но передать NO) в контроллер, где вы хотите, чтобы панель вкладок была видимой. Вы также должны снять флажок "Скрыть нижнюю планку при нажатии" в IB.

После редактирования:

Вы получите лучшую анимацию, если в первом контроллере вы будете анимировать альфа-значение не скрытой панели вкладок от 0 до 1 за короткое время. Это выглядит хорошо, если вы вернетесь с помощью кнопки "Назад". Если вы хотите использовать салфетки назад, вам нужно будет сделать что-то более сложное с помощью interactivePopGestureRecognizer.

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden = NO;
    self.tabBarController.tabBar.alpha = 0.0;
    [UIView animateWithDuration:.4 animations:^{
        self.tabBarController.tabBar.alpha = 1.0;
    }];
}

Ответ 7

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden = NO;
    self.tabBarController.tabBar.alpha = 0.0;
    [UIView animateWithDuration:.3 animations:^{
        self.tabBarController.tabBar.alpha = 5.0;
    }];
}

Ответ 8

установить UINavigationBar Полупрозрачный с NO.

вот так: self.navigationController.navigationBar.translucent = NO;

Ответ 9

В раскадровке перейдите к контроллеру представления, который вы хотите скрыть панель вкладок, нажмите "Инспектор атрибутов" и выберите "Скрыть нижнюю панель" при нажатии. Проверьте изображение ниже.

пример раскадровки

Ответ 10

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