iOS动画UITabBarController滑动;查看重叠状态栏-仅在首次加载时

我尝试自己为TabBarControllers视图的左右滑动动画。滑动时,新进入的视图将向上移动iOS状态栏的高度。因此,它直接连接到屏幕顶部并与状态栏重叠。动画结束后,视图将跳到正确的位置。 这仅在第一次加载视图时/尚未加载视图时发生。如果失败,在动画开始之前isViewLoaded为false。

    UIView.transition(from: selectedViewController!.view,to: getTabView(index),duration: 0.3,options: UIView.AnimationOptions.transitionCrossDissolve,completion: { _ in selectedIndex = index })

    ...

    func getTabView(_ index:Int) -> UIView {
      if self.viewControllers![index].isViewLoaded {
        //print "loaded" - all fine - view's position is correct
        //tried loadView() but doesnt change anything
      }
      else {
        //print "first load" - view is shifted up
      }
      return viewControllers![index].view //when accessing .view,the view is loaded anyway (docs)
    }

顺便说一句,当我通过tabBar按钮切换选项卡时,不会发生此问题。

非常感谢您!

didy21dd 回答:iOS动画UITabBarController滑动;查看重叠状态栏-仅在首次加载时

这仍然很奇怪,但我已将其修复。 首先,我设置了一个UITabBarControllerDelegate以在触摸Tabbar按钮时在选项卡之间进行CrossDissolve。 因为这可以正常工作,所以我想我可以以某种方式调用委托函数

    tabBarController(_ tabBarController: UITabBarController,shouldSelect viewController: UIViewController) -> Bool

以编程方式代替

    UIView.transition(from: selectedViewController!.view,to: getTabView(index),duration: 0.3,options: UIView.AnimationOptions.transitionCrossDissolve,completion: { _ in selectedIndex = index })

这不起作用,还有另一个故障。但这在某种程度上是显而易见的,因为我读过它并不是要直接调用此委托函数。 通过尝试这个,它突然起作用。偶然地,我没有评论这两个:委托函数调用和UIView.transition之后。这行得通。

本文链接:https://www.f2er.com/3052544.html

大家都在问