我的应用程序(简化)结构是:
UITabBarController
,其中一个UINavigationController
持有UITableViewController
作为根视图控制器。
当点击其中一个表视图控制器单元格时,我按下常规UIViewController
(让它称之为VC)结束隐藏底部标签栏。 (使用"按下时隐藏底栏"标志)
在故事板中,我向VC添加了一个常规UIView
子类,看起来像一个底栏,我使用自动布局将其固定到VC视图的底部。
问题
当我按下VC时,此视图需要一秒钟才能固定到底部,看起来自动布局会将其固定到底部,就好像标签栏没有隐藏一样,一秒后它会识别标签栏被隐藏并移动它到视图的真正底部。
我知道这不是最好的解释,所以我添加了very simple project来证明这个问题。
答案 0 :(得分:61)
问题在于此特定约束,它位于底部布局指南的视图和顶部之间。
选择约束并编辑其"第二项"属性
在这里你需要选择底部
一旦你有了,粉红色的视图不再受布局指南的影响。布局指南似乎承认只有在推送的视图控制器的根视图位于主屏幕的边界之后才会隐藏选项卡栏,这仅在动画完成时才会发生。
这就是视图层次结构需要再次布局导致不需要的动画的原因。
答案 1 :(得分:32)
接受的答案对我不起作用(该选项不可用)。但是我找到了另一个解决方案。 (基于Hide Bottom Bar When Pushed through Autolayout)
选择展位视图和要对齐的对象(在我的情况下为btnShare)并添加新的对齐约束(底边)。
答案 2 :(得分:14)
您好在故事板中选择标签栏(是标签栏控制器场景>标签栏控制器>标签栏),在属性检查器中,取消选中“半透明”框。此操作可以解决您的问题。 (但是有很多东西,"在推动时隐藏底栏"是工具栏)。
答案 3 :(得分:6)
选择“导航控制器”,然后在“属性检查器”中删除“底部条形图”下的复选标记。
答案 4 :(得分:6)
答案 5 :(得分:3)
答案 6 :(得分:2)
如果您希望隐藏标签栏,可以将此代码添加到控制器,
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = YES;
}
您还必须将该代码(但传递给NO)放入您希望标签栏可见的控制器中。您还应该在推送时取消选择"隐藏底栏" IB中的方框。
编辑后:
如果在第一个控制器中,您可以在短时间内将非隐藏标签栏的Alpha值从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 :(得分:1)
-(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 :(得分:1)
使用NO。
设置UINavigationBar半透明像这样:self.navigationController.navigationBar.translucent = NO;
答案 9 :(得分:0)
尝试将视图的底部固定在superview的底部,而不是底部布局