【问题标题】:iOS7 strange animation when using hidesBottomBarWhenPushediOS7 使用 hidesBottomBarWhenPushed 时出现奇怪的动画
【发布时间】:2014-04-26 07:10:42
【问题描述】:

当推另一个视图控制器时,我得到了一个非常奇怪的动画行为,该控制器的底栏被 hidesBottomBarWhenPushed 隐藏了。我发现的第一个线程是:Strange animation on iOS 7 when using hidesBottomBarWhenPushed in app built targeting <= iOS 6 但由于我的应用程序仅在 iOS7 上构建和运行,因此我的问题不是这种情况。

请查看以下显示问题的视频(查看右上角):

https://dl.dropboxusercontent.com/u/66066789/ios7.mov

这个奇怪的动画阴影只有在 hidesBottomBarWhenPushed 为 true 时才会出现。 我该如何解决?

【问题讨论】:

  • 动画中有什么奇怪的地方?你是说右边的闪烁吗?
  • 对,右上角黑影在闪烁。
  • 发生这种情况是因为扩展的边缘在推送的视图控制器上是关闭的。这就是它们在我的应用中发生的地方。
  • 延伸边缘是“在顶部钢筋之下,在底部钢筋之下”。这是默认设置。试过关掉,还是一样的问题..
  • 该视频现在无法通过该链接访问。你介意把它放回去吗?这篇文章对我来说很有价值,因为我也遇到了同样的问题,而且这篇文章似乎是我唯一能找到人们谈论它的地方。

标签: objective-c ios7 uiviewcontroller uitableview pushviewcontroller


【解决方案1】:

在我的情况下,我在每个选项卡中都有 TabBarViewControllerUINavigationController 并面临类似的问题。我用过,

nextScreen.hidesBottomBarWhenPushed = true
pushViewToCentralNavigationController(nextScreen)

nextScreenUITableViewController 子类并应用自动布局时,它可以正常工作。但是,当 nextScreen 为 UIViewController 时,它不能正常工作。我发现它取决于nextScreen 自动布局约束。

所以我刚刚用这段代码更新了我的 currentScreen -

override func viewWillDisappear(animated: Bool) {

        super.viewWillDisappear(animated)

        self.tabBarController?.tabBar.hidden = true

    }

更多详情-https://stackoverflow.com/a/39145355/2564720

【讨论】:

    【解决方案2】:

    Leo Natan 是正确的。这种模糊效果的原因是因为整个 Tab Bar Controller 正在导航控制器下方进行动画处理,并且默认情况下该视图后面是黑色的 UIWindow。我将 UIWindow 背景颜色更改为白色,这解决了问题。

    hidesBottomBarWhenPushed 似乎与 UITabBars (iOS 7/8) 配合得很好。

    【讨论】:

    • 这是我的工作答案,搜索了几个小时。
    • 我从没想过要改变 UIWindow 的颜色...太棒了!
    • 我必须发表评论说 6 年后这个错误仍然存​​在于 iOS 13 上,这个解决方法可能会为我节省几个小时。顺便说一句,要支持暗模式,window.backgroundColor 应该是UIColor.systemBackground
    【解决方案3】:

    在保持透明度的同时,一种优雅的做法是将其添加到根UIViewController

    - (void)viewWillAppear:(BOOL)animated {
        [UIView animateWithDuration:0.35f animations:^{
            self.tabBarController.tabBar.alpha = 1.0f;
        }];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [UIView animateWithDuration:0.35f animations:^{
            self.tabBarController.tabBar.alpha = 0.0f;
        }];
    }
    

    这样您将获得一个漂亮的标签栏淡入/淡出动画。

    【讨论】:

    • 很棒的答案,因为您不必为正在呈现或推送的其他视图控制器维护选项卡栏的可见性。
    【解决方案4】:

    在 Storyboard 中关闭 Navigation BarTranslucent 属性。

    【讨论】:

    • 这个解决方案仍然适用于当前的 ios 14
    【解决方案5】:

    解决了我的问题:

    self.tabBarController.tabBar.hidden=YES;
    

    在第二个视图控制器是要走的路。

    【讨论】:

    • 尝试旋转视图控制器,see what happens
    • 旋转是什么意思?这似乎真的很好用。
    【解决方案6】:

    如果你在viewWillAppear 的第二个视图控制器中放置

    [self.navigationController setToolbarHidden:YES animated:NO];
    

    【讨论】:

    • 因为它是标签栏,而不是工具栏。
    • 那么self.tabBarController.tabBar.hidden=YES; ?
    • @IleaCristian 这将产生另一个问题,底部会有一个空白区域。
    • 我猜你指的是滚动视图(tableview)插图的设置方式使得内容显示良好,但它也有机会进入半透明视图(导航栏/标签栏等)。好吧,在 iOS7 中有一个新的 viewcontroller 属性来阻止这种情况的发生。只需将 self.automaticallyAdjustsScrollViewInsets 设置为 NO。但随后 tableview 也将位于导航栏下方。解决方案是使用一些新的 iOS7 属性为表格视图设置自定义 contentInset:self.topLayoutGuide.length 和 self.bottomLayoutGuide.length。长度是条的高度。
    • 问题是,self.bottomLayoutGuide.length在某些情况下返回错误,当bar被tabBar.hidden = YES;隐藏时。
    猜你喜欢
    • 2016-03-02
    • 2011-07-03
    • 1970-01-01
    • 2019-05-15
    • 2019-03-22
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多