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.destinationView.clipsToBounds = false
transitionContext.destinationView.frame = transitionContext.destinationViewFinalFrame!
transitionContext.destinationView.transform = CGAffineTransform(scaleX: 2.0, y: 2.0)
transitionContext.containerView.addSubview(transitionContext.destinationView)
@ -97,6 +98,7 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning
if let navigationController = transitionContext.destinationViewController as? UINavigationController
{
let padding: CGFloat = 44
let topViewController = navigationController.viewControllers[0]
if !navigationController.isNavigationBarHidden
{
@ -105,13 +107,26 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning
topToolbar.barStyle = navigationController.toolbar.barStyle
transitionContext.destinationView.insertSubview(topToolbar, at: 1)
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
if #available(iOS 13, *)
{
let appearance = UIToolbarAppearance(barAppearance: navigationController.navigationBar.standardAppearance)
topToolbar.standardAppearance = appearance
topToolbar.topAnchor.constraint(equalTo: topViewController.view.topAnchor, constant: -padding).isActive = true
topToolbar.leftAnchor.constraint(equalTo: topViewController.view.leftAnchor, constant: -padding).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
}
@ -123,10 +138,23 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning
bottomToolbar.barStyle = navigationController.toolbar.barStyle
transitionContext.destinationView.insertSubview(bottomToolbar, belowSubview: navigationController.navigationBar)
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
if #available(iOS 13, *)
{
let appearance = UIToolbarAppearance(barAppearance: navigationController.toolbar.standardAppearance)
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
}