edgesForExtendedLayout ignored on iOS9 when using

2019-01-25 22:23发布

iOS9 seems to ignore destination view controller's edgesForExtendedLayout when implementing custom animation using UIViewControllerAnimatedTransitioning, therefore the content ends up below the navigation bar. Any idea why this is happening?

I've hosted an example at https://github.com/nmarkovic04/CustomAnimationTest. Running it on 8.4 and 9.1 shows the difference but you can most likely try any other 8.x and 9.x version.

Running on XCode 7, Swift 2.0.

screenshot

4条回答
我只想做你的唯一
2楼-- · 2019-01-25 22:35

I know this is awful, but in viewDidLoad() i solved with this:

var frame = self.view.frame
frame.origin.y = 64 //The height of status bar + navigation bar
self.view.frame = frame

For me the problem comes out the first time my view controller is seen, when i rotate the device the problem is gone.

查看更多
该账号已被封号
3楼-- · 2019-01-25 22:39

You have to setup proper toViewController's frame. transitionContext.finalFrame(for:) will help you. This is my animateTransition(using:) function for fade in/out animation. That one line setting up frame will also fix your shared project.

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        if let toViewController = transitionContext.viewController(forKey: .to) {

            transitionContext.containerView.addSubview(toViewController.view)
            toViewController.view.frame = transitionContext.finalFrame(for: toViewController)
            toViewController.view.alpha = 0.0

            UIView.animate(withDuration: 0.5,
                           animations: {
                            toViewController.view.alpha = 1.0},
                           completion: { finished in
                            transitionContext.completeTransition(!transitionContext.transitionWasCancelled)})
        }
    }
查看更多
手持菜刀,她持情操
4楼-- · 2019-01-25 22:47

this in ViewDidLoad fixes it can you confirm pls :]

self.edgesForExtendedLayout = .Top self.extendedLayoutIncludesOpaqueBars = true

查看更多
时光不老,我们不散
5楼-- · 2019-01-25 23:01

Just setting this:

  self.edgesForExtendedLayout = UIRectEdgeTop;

Resolved the issue for me.

查看更多
登录 后发表回答