动画状态栏以及segue中的自定义转换

问题描述 投票:3回答:1

我有两个ViewControllers,使用第一个我提出的第二个自定义segue,自定义动画师和基于百分比的交互器。

我想在控制器转换的同时向上滑动状态栏。

在第二个ViewController我有这个,以隐藏状态栏

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return .slide
    }

override var prefersStatusBarHidden: Bool {
        return true
    }

我知道我应该在动画块中调用setNeedsStatusBarAppearanceUpdate()以使其动画化,并使用UIViewControllerTransitionCoordinator方法animateAlongsideTransition:以使其跟随转换,但我不知道我应该在哪里调用此方法。

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

什么是正确的地方?

ios swift uikit statusbar
1个回答
3
投票

您无法看到动画的原因是因为在您的第二个视图控制器中您总是将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

© www.soinside.com 2019 - 2024. All rights reserved.