Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

edgesForExtendedLayout ignored on iOS9 when using custom animation

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

like image 538
Mercurial Avatar asked Dec 25 '22 13:12

Mercurial


2 Answers

this in ViewDidLoad fixes it can you confirm pls :]

self.edgesForExtendedLayout = .Top self.extendedLayoutIncludesOpaqueBars = true

like image 192
David Yang Liu Avatar answered Dec 31 '22 12:12

David Yang Liu


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)})
        }
    }
like image 30
Viktor Kucera Avatar answered Dec 31 '22 12:12

Viktor Kucera