自动布局和 "Hide bottom bar when pushed"
Auto Layout and "Hide bottom bar when pushed"
我的应用程序的(简化)结构是这样的:
UITabBarController
其中一个 UINavigationController
持有一个 UITableViewController
作为根视图控制器。
当点击其中一个 table 视图控制器单元格时,我按下常规 UIViewController
(我们称之为 VC)结束隐藏底部标签栏。 (使用 "Hide bottom bar when pushed" 标志)
在情节提要中,我向 VC 添加了一个常规 UIView
子类,它看起来像底部栏,我使用自动布局将其固定到 VC 视图的底部。
问题
当我按下 VC 时,这个视图需要一秒钟才能固定到底部,看起来自动布局将它固定到底部,就好像标签栏没有隐藏一样,一秒钟后它识别出标签栏是隐藏并将其移动到视图的真正底部。
我知道这不是最好的解释,所以我添加了一个 very simple project 来说明这个问题。
你好在故事板select标签栏(是标签栏控制器场景>标签栏控制器>标签栏),在属性检查器中,取消选中半透明框。此操作可解决您的问题。 (不过还有很多东西,"Hide bottom bar when pushed"是toolbar)。
如果你想隐藏标签栏,你可以将这段代码添加到你的控制器中,
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = YES;
}
您还必须将该代码(但传递 NO)放入您希望标签栏可见的控制器中。您还应该取消选择 IB 中的 "Hide bottom bar when pushed" 框。
编辑后:
如果在第一个控制器中将非隐藏选项卡栏的 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;
}];
}
尝试将视图的底部固定到父视图的底部而不是底部布局
-(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;
}];
}
设置UINavigationBar Translucent with NO.
像这样:self.navigationController.navigationBar.translucent = NO;
Select 您的 "Navigation Controller" 并在 "Attribute Inspector" 中删除 "Under Bottom Bars" 的复选标记。
问题在于视图和底部布局指南顶部之间的特定约束。
Select 约束并编辑其 "Second Item" 属性
这里需要选择bottom
一旦你有了它,粉红色视图就不再受布局指南的影响。布局指南似乎承认标签栏只有在推送视图控制器的根视图位于主屏幕边界后才会隐藏,并且只有在动画完成时才会发生这种情况。
这就是视图层次结构需要重新布局的原因,这会导致不需要的动画。
在故事板中,转到要隐藏选项卡栏的视图控制器,单击 Attribute Inspector 和 select Hide bottom推动时的酒吧。检查下面的图像。
接受的答案对我不起作用(该选项不可用)。但是我找到了另一种解决方案。 (基于 )
Select 显示要对齐的视图和对象(在我的例子中是 btnShare)并添加新的对齐约束(底边)。
如果你不能 select bottomlayoutguide bottom in your Xcode 7+
只需执行以下操作:
在源代码编辑器中打开故事板
搜索您的控制器的标识符
找到 <layoutGuides>
,输入 <bottom>
,复制它 id
按id搜索
从上到下更改属性
享受。
我的应用程序的(简化)结构是这样的:
UITabBarController
其中一个 UINavigationController
持有一个 UITableViewController
作为根视图控制器。
当点击其中一个 table 视图控制器单元格时,我按下常规 UIViewController
(我们称之为 VC)结束隐藏底部标签栏。 (使用 "Hide bottom bar when pushed" 标志)
在情节提要中,我向 VC 添加了一个常规 UIView
子类,它看起来像底部栏,我使用自动布局将其固定到 VC 视图的底部。
问题
当我按下 VC 时,这个视图需要一秒钟才能固定到底部,看起来自动布局将它固定到底部,就好像标签栏没有隐藏一样,一秒钟后它识别出标签栏是隐藏并将其移动到视图的真正底部。
我知道这不是最好的解释,所以我添加了一个 very simple project 来说明这个问题。
你好在故事板select标签栏(是标签栏控制器场景>标签栏控制器>标签栏),在属性检查器中,取消选中半透明框。此操作可解决您的问题。 (不过还有很多东西,"Hide bottom bar when pushed"是toolbar)。
如果你想隐藏标签栏,你可以将这段代码添加到你的控制器中,
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = YES;
}
您还必须将该代码(但传递 NO)放入您希望标签栏可见的控制器中。您还应该取消选择 IB 中的 "Hide bottom bar when pushed" 框。
编辑后:
如果在第一个控制器中将非隐藏选项卡栏的 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;
}];
}
尝试将视图的底部固定到父视图的底部而不是底部布局
-(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;
}];
}
设置UINavigationBar Translucent with NO.
像这样:self.navigationController.navigationBar.translucent = NO;
Select 您的 "Navigation Controller" 并在 "Attribute Inspector" 中删除 "Under Bottom Bars" 的复选标记。
问题在于视图和底部布局指南顶部之间的特定约束。
Select 约束并编辑其 "Second Item" 属性
这里需要选择bottom
一旦你有了它,粉红色视图就不再受布局指南的影响。布局指南似乎承认标签栏只有在推送视图控制器的根视图位于主屏幕边界后才会隐藏,并且只有在动画完成时才会发生这种情况。
这就是视图层次结构需要重新布局的原因,这会导致不需要的动画。
在故事板中,转到要隐藏选项卡栏的视图控制器,单击 Attribute Inspector 和 select Hide bottom推动时的酒吧。检查下面的图像。
接受的答案对我不起作用(该选项不可用)。但是我找到了另一种解决方案。 (基于
Select 显示要对齐的视图和对象(在我的例子中是 btnShare)并添加新的对齐约束(底边)。
如果你不能 select bottomlayoutguide bottom in your Xcode 7+
<layoutGuides>
,输入 <bottom>
,复制它 id