it-swarm.com.ru

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

Структура моего приложения (упрощенная) такова:

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

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

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

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

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

38
Eyal

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

enter image description here

Выберите ограничение и измените его свойство «Второй элемент».

enter image description here

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

enter image description here

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

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

61
Earl Grey

Принятый ответ не работал для меня (опция была недоступна). Однако я нашел другое решение. (на основе Hide Bottom Bar, когда проталкивается через Autolayout )

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

enter image description here enter image description here

32
Vincenzo

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

14
Onik IV

Выберите «Контроллер навигации» и в «Инспекторе атрибутов» снимите флажок «Под нижними панелями».

6
Arash

Если вы не можете выбрать bottomlayoutguide bottom в вашем Xcode 7+

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

 open in editor поиск идентификатора вашего контроллера 

 search in source file найти <layoutGuides>, ввести <bottom>, скопировать его идентификатор

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

 find and replace наслаждаться.

6
Zaporozhchenko Aleksandr

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

 storyboard example

2
Mário Carvalho

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

- (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;
    }];
}
2
rdelmar

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

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

1
taitanxiami
-(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;
    }];
}
1
Breno Morais

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

0
Karthik Rao