Fixes incorrect GamesStoryboardSegue animation on iOS 13

The additional toolbars to extend the edges beyond the navigation controller's bounds weren't positioned correctly on iOS 13.
This commit is contained in:
Riley Testut 2019-10-10 19:26:13 -07:00
parent 6afff591ff
commit 63c932561e

View File

@ -76,6 +76,7 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning
{ {
transitionContext.sourceViewController.beginAppearanceTransition(false, animated: true) transitionContext.sourceViewController.beginAppearanceTransition(false, animated: true)
transitionContext.destinationView.clipsToBounds = false
transitionContext.destinationView.frame = transitionContext.destinationViewFinalFrame! transitionContext.destinationView.frame = transitionContext.destinationViewFinalFrame!
transitionContext.destinationView.transform = CGAffineTransform(scaleX: 2.0, y: 2.0) transitionContext.destinationView.transform = CGAffineTransform(scaleX: 2.0, y: 2.0)
transitionContext.containerView.addSubview(transitionContext.destinationView) transitionContext.containerView.addSubview(transitionContext.destinationView)
@ -97,6 +98,7 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning
if let navigationController = transitionContext.destinationViewController as? UINavigationController if let navigationController = transitionContext.destinationViewController as? UINavigationController
{ {
let padding: CGFloat = 44 let padding: CGFloat = 44
let topViewController = navigationController.viewControllers[0]
if !navigationController.isNavigationBarHidden if !navigationController.isNavigationBarHidden
{ {
@ -105,13 +107,26 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning
topToolbar.barStyle = navigationController.toolbar.barStyle topToolbar.barStyle = navigationController.toolbar.barStyle
transitionContext.destinationView.insertSubview(topToolbar, at: 1) transitionContext.destinationView.insertSubview(topToolbar, at: 1)
topToolbar.topAnchor.constraint(equalTo: navigationController.navigationBar.topAnchor, constant: -padding).isActive = true if #available(iOS 13, *)
topToolbar.leftAnchor.constraint(equalTo: navigationController.navigationBar.leftAnchor, constant: -padding).isActive = true {
topToolbar.rightAnchor.constraint(equalTo: navigationController.navigationBar.rightAnchor, constant: padding).isActive = true let appearance = UIToolbarAppearance(barAppearance: navigationController.navigationBar.standardAppearance)
topToolbar.standardAppearance = appearance
// There is no easy way to determine the extra height necessary at this point of the transition, so hard code for now. topToolbar.topAnchor.constraint(equalTo: topViewController.view.topAnchor, constant: -padding).isActive = true
let additionalSearchBarHeight = 44 as CGFloat topToolbar.leftAnchor.constraint(equalTo: topViewController.view.leftAnchor, constant: -padding).isActive = true
topToolbar.heightAnchor.constraint(equalToConstant: navigationController.topViewController!.view.safeAreaInsets.top + additionalSearchBarHeight).isActive = true topToolbar.rightAnchor.constraint(equalTo: topViewController.view.rightAnchor, constant: padding).isActive = true
topToolbar.bottomAnchor.constraint(equalTo: topViewController.view.safeAreaLayoutGuide.topAnchor).isActive = true
}
else
{
topToolbar.topAnchor.constraint(equalTo: navigationController.navigationBar.topAnchor, constant: -padding).isActive = true
topToolbar.leftAnchor.constraint(equalTo: navigationController.navigationBar.leftAnchor, constant: -padding).isActive = true
topToolbar.rightAnchor.constraint(equalTo: navigationController.navigationBar.rightAnchor, constant: padding).isActive = true
// There is no easy way to determine the extra height necessary at this point of the transition, so hard code for now.
let additionalSearchBarHeight = 44 as CGFloat
topToolbar.heightAnchor.constraint(equalToConstant: navigationController.topViewController!.view.safeAreaInsets.top + additionalSearchBarHeight).isActive = true
}
topPaddingToolbar = topToolbar topPaddingToolbar = topToolbar
} }
@ -123,10 +138,23 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning
bottomToolbar.barStyle = navigationController.toolbar.barStyle bottomToolbar.barStyle = navigationController.toolbar.barStyle
transitionContext.destinationView.insertSubview(bottomToolbar, belowSubview: navigationController.navigationBar) transitionContext.destinationView.insertSubview(bottomToolbar, belowSubview: navigationController.navigationBar)
bottomToolbar.topAnchor.constraint(equalTo: navigationController.toolbar.topAnchor).isActive = true if #available(iOS 13, *)
bottomToolbar.bottomAnchor.constraint(equalTo: navigationController.toolbar.bottomAnchor, constant: padding).isActive = true {
bottomToolbar.leftAnchor.constraint(equalTo: navigationController.toolbar.leftAnchor, constant: -padding).isActive = true let appearance = UIToolbarAppearance(barAppearance: navigationController.toolbar.standardAppearance)
bottomToolbar.rightAnchor.constraint(equalTo: navigationController.toolbar.rightAnchor, constant: padding).isActive = true bottomToolbar.standardAppearance = appearance
bottomToolbar.topAnchor.constraint(equalTo: topViewController.view.safeAreaLayoutGuide.bottomAnchor).isActive = true
bottomToolbar.bottomAnchor.constraint(equalTo: topViewController.view.bottomAnchor, constant: padding).isActive = true
bottomToolbar.leftAnchor.constraint(equalTo: topViewController.view.leftAnchor, constant: -padding).isActive = true
bottomToolbar.rightAnchor.constraint(equalTo: topViewController.view.rightAnchor, constant: padding).isActive = true
}
else
{
bottomToolbar.topAnchor.constraint(equalTo: navigationController.toolbar.topAnchor).isActive = true
bottomToolbar.bottomAnchor.constraint(equalTo: navigationController.toolbar.bottomAnchor, constant: padding).isActive = true
bottomToolbar.leftAnchor.constraint(equalTo: navigationController.toolbar.leftAnchor, constant: -padding).isActive = true
bottomToolbar.rightAnchor.constraint(equalTo: navigationController.toolbar.rightAnchor, constant: padding).isActive = true
}
bottomPaddingToolbar = bottomToolbar bottomPaddingToolbar = bottomToolbar
} }