代码之家  ›  专栏  ›  技术社区  ›  Francesco Zaffaroni

在segue中沿自定义过渡设置状态栏动画

  •  3
  • Francesco Zaffaroni  · 技术社区  · 8 年前

    我有两个 ViewControllers ,使用第一个自定义序列,我将显示第二个,带有自定义动画和基于百分比的交互。

    我想沿着控制器转换向上滑动状态栏。

    在第二个 ViewController 我有这个是为了隐藏状态栏

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
            return .slide
        }
    
    override var prefersStatusBarHidden: Bool {
            return true
        }
    

    我知道我应该打电话 setNeedsStatusBarAppearanceUpdate() 在动画块中设置动画,并使用 UIViewControllerTransitionCoordinator 方法 animateAlongsideTransition: 为了使它遵循转换,但我不确定应该在哪里调用此方法。

    我试过了 viewWillAppear 第二个控制器的方法,但它仍然立即消失,没有动画。

    这个叫什么名字?

    1 回复  |  直到 8 年前
        1
  •  3
  •   mugx    8 年前

    无法查看动画的原因是,在第二个视图控制器中,始终返回 true prefersStatusBarHidden ,则该视图控制器以该条件开始,因此没有任何“机会”播放动画。

    因此,在第二个视图控制器中,您可以尝试这样做:

    class ViewController2: UIViewController {
      override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { get { return .slide } }
      override var prefersStatusBarHidden: Bool { return statusBarHidden }
      var statusBarHidden = false
    
      override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    
        self.statusBarHidden = true
        UIView.animate(withDuration: 0.35) {
          self.setNeedsStatusBarAppearanceUpdate()
        }
      }
    }
    

    此外 Info.plist 一定要有 View controller-based status bar appearance = YES