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:
parent
6afff591ff
commit
63c932561e
@ -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
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user