From 1bda17f09a422ce6e97b3904b2b0e806f7611d68 Mon Sep 17 00:00:00 2001 From: pera Date: Thu, 4 May 2017 17:16:35 -0300 Subject: [PATCH] Fixes #357 --- Sources/ButtonBarPagerTabStripViewController.swift | 2 +- Sources/PagerTabStripViewController.swift | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Sources/ButtonBarPagerTabStripViewController.swift b/Sources/ButtonBarPagerTabStripViewController.swift index d4e1c1c..790c7ee 100644 --- a/Sources/ButtonBarPagerTabStripViewController.swift +++ b/Sources/ButtonBarPagerTabStripViewController.swift @@ -266,7 +266,7 @@ open class ButtonBarPagerTabStripViewController: PagerTabStripViewController, Pa return cells } - // MARK: - UICollectionViewDelegateFlowLayut + // MARK: - UICollectionViewDelegateFlowLayout open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize { guard let cellWidthValue = cachedCellWidths?[indexPath.row] else { diff --git a/Sources/PagerTabStripViewController.swift b/Sources/PagerTabStripViewController.swift index 564124e..672db6e 100644 --- a/Sources/PagerTabStripViewController.swift +++ b/Sources/PagerTabStripViewController.swift @@ -62,6 +62,7 @@ open class PagerTabStripViewController: UIViewController, UIScrollViewDelegate { open private(set) var viewControllers = [UIViewController]() open private(set) var currentIndex = 0 + open private(set) var preCurrentIndex = 0 // used *only* to store the index to which move when the pager becomes visible open var pageWidth: CGFloat { return containerView.bounds.width @@ -123,6 +124,10 @@ open class PagerTabStripViewController: UIViewController, UIScrollViewDelegate { super.viewDidAppear(animated) lastSize = containerView.bounds.size updateIfNeeded() + let needToUpdateCurrentChild = preCurrentIndex != currentIndex + if needToUpdateCurrentChild { + moveToViewController(at: preCurrentIndex) + } isViewAppearing = false childViewControllers.forEach { $0.endAppearanceTransition() } } @@ -148,9 +153,10 @@ open class PagerTabStripViewController: UIViewController, UIScrollViewDelegate { open func moveToViewController(at index: Int, animated: Bool = true) { guard isViewLoaded && view.window != nil && currentIndex != index else { - currentIndex = index + preCurrentIndex = index return } + if animated && pagerBehaviour.skipIntermediateViewControllers && abs(currentIndex - index) > 1 { var tmpViewControllers = viewControllers let currentChildVC = viewControllers[currentIndex] @@ -268,6 +274,7 @@ open class PagerTabStripViewController: UIViewController, UIScrollViewDelegate { let virtualPage = virtualPageFor(contentOffset: containerView.contentOffset.x) let newCurrentIndex = pageFor(virtualPage: virtualPage) currentIndex = newCurrentIndex + preCurrentIndex = currentIndex let changeCurrentIndex = newCurrentIndex != oldCurrentIndex if let progressiveDeledate = self as? PagerTabStripIsProgressiveDelegate, pagerBehaviour.isProgressiveIndicator { @@ -296,6 +303,7 @@ open class PagerTabStripViewController: UIViewController, UIScrollViewDelegate { if currentIndex >= viewControllers.count { currentIndex = viewControllers.count - 1 } + preCurrentIndex = currentIndex containerView.contentOffset = CGPoint(x: pageOffsetForChild(at: currentIndex), y: 0) updateContent() } @@ -333,6 +341,7 @@ open class PagerTabStripViewController: UIViewController, UIScrollViewDelegate { guard let me = self else { return } me.isViewRotating = false me.currentIndex = me.pageBeforeRotate + me.preCurrentIndex = me.currentIndex me.updateIfNeeded() } }