From 57c023c9731bee5f11e9ac31667e46fb7630d65e Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sat, 31 Aug 2024 11:09:17 -0400 Subject: [PATCH] Fix profile tab switching animation ending in bad state Caused by fda0c187949d0e7c8d792d616bb90f1bd90c3d10, old/new.view is no longer the same as .collectionView, so the transform wasn't being properly reset. Closes #536 --- Tusker/Screens/Profile/ProfileViewController.swift | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Tusker/Screens/Profile/ProfileViewController.swift b/Tusker/Screens/Profile/ProfileViewController.swift index 7711e66d..70633e57 100644 --- a/Tusker/Screens/Profile/ProfileViewController.swift +++ b/Tusker/Screens/Profile/ProfileViewController.swift @@ -213,7 +213,7 @@ class ProfileViewController: UIViewController, StateRestorableViewController { // old header cell must have the header view let headerView = oldHeaderCell.addConstraint(height: oldHeaderCell.bounds.height)! - // Set the outgoing VC's header view mode to placeholder, so that it does steal the header view back + // Set the outgoing VC's header view mode to placeholder, so that it does not steal the header view back // in case it updates the cell in the background. old.headerViewMode = .placeholder(height: oldHeaderCell.bounds.height) @@ -224,12 +224,13 @@ class ProfileViewController: UIViewController, StateRestorableViewController { } // disable user interaction during animation, to avoid any potential weird race conditions - headerView.isUserInteractionEnabled = false + view.isUserInteractionEnabled = false + headerView.layer.zPosition = 100 view.addSubview(headerView) let oldHeaderCellTop = oldHeaderCell.convert(CGPoint.zero, to: view).y let headerTopOffset = oldHeaderCellTop - view.safeAreaInsets.top - let headerBottomOffset = oldHeaderCell.convert(CGPoint(x: 0, y: oldHeaderCell.bounds.maxY), to: view).y// - view.safeAreaInsets.top + let headerBottomOffset = oldHeaderCell.convert(CGPoint(x: 0, y: oldHeaderCell.bounds.maxY), to: view).y NSLayoutConstraint.activate([ headerView.topAnchor.constraint(equalTo: view.topAnchor, constant: headerTopOffset), headerView.bottomAnchor.constraint(equalTo: view.topAnchor, constant: headerBottomOffset), @@ -272,16 +273,17 @@ class ProfileViewController: UIViewController, StateRestorableViewController { } animator.addCompletion { _ in old.removeViewAndController() - old.collectionView.transform = .identity + old.view.transform = .identity - new.collectionView.transform = .identity + new.view.transform = .identity new.collectionView.contentOffset = origOldContentOffset // reenable scroll indicators after the switching animation is done old.collectionView.showsVerticalScrollIndicator = true new.collectionView.showsVerticalScrollIndicator = true - headerView.isUserInteractionEnabled = true + self.view.isUserInteractionEnabled = true + headerView.transform = .identity headerView.layer.zPosition = 0 // move the header view into the new page controller's cell