Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自动布局和;按下时隐藏底部栏“;_Ios_Objective C_Storyboard_Uitabbarcontroller_Autolayout - Fatal编程技术网

Ios 自动布局和;按下时隐藏底部栏“;

Ios 自动布局和;按下时隐藏底部栏“;,ios,objective-c,storyboard,uitabbarcontroller,autolayout,Ios,Objective C,Storyboard,Uitabbarcontroller,Autolayout,我的应用程序的(简化)结构如下: UITableViewController带有一个UINavigationController作为根视图控制器持有一个UITableViewController 点击其中一个table view controller单元格时,我按下一个常规的UIViewController(我们称之为VC)结束键,隐藏底部选项卡栏。(使用“按下时隐藏底部栏”标志) 在storyboard中,我向VC添加了一个常规的UIView子类,它看起来像一个底部栏,我使用自动布局将其固定到

我的应用程序的(简化)结构如下:

UITableViewController
带有一个
UINavigationController
作为根视图控制器持有一个
UITableViewController

点击其中一个table view controller单元格时,我按下一个常规的
UIViewController
(我们称之为VC)结束键,隐藏底部选项卡栏。(使用“按下时隐藏底部栏”标志)

在storyboard中,我向VC添加了一个常规的
UIView
子类,它看起来像一个底部栏,我使用自动布局将其固定到VC视图的底部

问题
当我按下VC键时,该视图需要一秒钟的时间才能固定到底部,它看起来像是自动布局将其固定到底部,就好像选项卡栏没有隐藏一样,一秒钟后,它会识别出选项卡栏已隐藏,并将其移动到视图的真实底部


我知道这不是最好的解释,所以我添加了一个例子来说明这个问题

Hi在情节提要中选择选项卡栏(是选项卡栏控制器场景>选项卡栏控制器>选项卡栏),在属性检查器中,取消选中半透明框。此操作可以解决您的问题。(但有很多东西,“按下时隐藏底部栏”是指工具栏)。

如果希望隐藏选项卡栏,可以将此代码添加到控制器中

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

尝试将视图的底部固定到superview的底部,而不是底部布局

将UINavigationBar设置为半透明,不带编号

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

如下所示:
self.navigationController.navigationBar.translucent=NO

选择“导航控制器”并在“属性检查器”中删除“底部栏下”的复选标记。

问题在于视图和底部布局指南顶部之间的特定约束

选择约束并编辑其“第二项”特性

在这里你需要选择底部

一旦有了它,粉色视图就不再受布局指南的影响。《布局指南》似乎承认,只有在推送视图控制器的根视图位于主屏幕的边界内时,选项卡栏才会隐藏,并且只有在动画完成时才会发生这种情况


这就是视图层次需要再次布局的原因,这会导致不需要的动画

在情节提要中,转到要隐藏选项卡栏的视图控制器,单击“属性检查器”,然后在按下时选择“隐藏底部栏”。检查下面的图像


接受的答案对我不起作用(选项不可用)。然而,我找到了另一个解决办法。(基于)

选择要对齐的视图和对象(在我的示例中为BTN share)并添加新的对齐约束(底边)


如果无法在Xcode 7中选择bottomlayoutguide底部+

只需执行以下操作: 在源代码编辑器中打开情节提要

搜索控制器的标识符

查找
,键入
,复制它的id

按id搜索 从上到下更改属性


享受。

我认为您没有按预期方式使用hidesBottomBarWhenPushed属性(请查看文档中的该方法)。它应该用于隐藏导航控制器可以显示的工具栏,而不是选项卡栏。hi@rdelmar那么按下时隐藏选项卡栏的正确方法是什么?我相信这应该是一件非常常见的事情。但是现在,当我按下VC时,选项卡栏是可见的,我需要将其隐藏。至少,在您共享的示例项目(AutoLayoutTest)中,如果您只取消选中选项卡栏中的半透明属性,则当您按下时,选项卡栏将消失,紫色视图将显示在其位置。(测试您自己的项目)为我工作,但我正在寻找它可能导致的任何未来错误。此解决方案的问题是您看到选项卡栏消失/出现。尤其是在使用“向后滑动”手势时。@Eyal,我编辑了我的答案,以显示改进动画的方法。我对这种解决方案不太满意,我认为隐藏/显示ViewWillExample/viewWillDisapear上的选项卡栏有点冒险。似乎“隐藏底部栏”在没有自动布局的情况下效果很好,所以我想知道是否与自动布局配置有关。@Eyal,Onik IV的解决方案有什么问题?当我取消选中选项卡栏的半透明属性时,我也看不到选项卡栏(按下时隐藏的底部栏仍处于选中状态)。当autolayout在@AnthonyM无法工作时,我也遇到了这个问题。我最终手工编辑了故事板的源代码,这样我就可以将约束项更改为使用底部布局指南.bottom.@AnthonyM它在Xcode 7中有点隐藏,但它就在那里:只是想知道你是如何手工编辑故事板源代码的,这样你就可以将约束项更改为使用底部布局指南.bottom?我已经被这个问题困扰了一段时间,不明白为什么我不能再在故事板中选择底部了?这对我来说不起作用,我在按下ViewController时仍然会显示1s的空白。超级…非常有用是的,这是正确的答案。在视图控制器上设置“按下时隐藏底部栏”,该选项不应显示选项卡栏。不要在选项卡栏控制器、导航控制器或控制器的父视图控制器上进行设置。