TabBar: Smarter content offset adjustment
This commit is contained in:
@@ -134,7 +134,7 @@ class TabBarView: UIView
|
||||
private var tabViews: [TabView] = []
|
||||
private var activeTabIndex: Int = 0
|
||||
private var tabContainerView = UIScrollView(frame: .zero)
|
||||
|
||||
private var needsScrollAdjustment = false
|
||||
private let bottomSeparatorView = UIView(frame: .zero)
|
||||
|
||||
private let placeholderTabImage = UIImage(systemName: "network")
|
||||
@@ -198,9 +198,7 @@ class TabBarView: UIView
|
||||
})
|
||||
}
|
||||
|
||||
// Adjust scroll offset
|
||||
let contentEnd = CGPoint(x: tabContainerView.contentSize.width - tabContainerView.bounds.width, y: 0.0)
|
||||
tabContainerView.setContentOffset(contentEnd, animated: animated)
|
||||
needsScrollAdjustment = true
|
||||
}
|
||||
|
||||
public func reloadTab(atIndex index: Int) {
|
||||
@@ -312,5 +310,15 @@ class TabBarView: UIView
|
||||
tabContainerView.contentSize = CGSize(
|
||||
width: xOffset, height: tabContainerBounds.height
|
||||
)
|
||||
|
||||
// Adjust content offset, if needed
|
||||
if needsScrollAdjustment {
|
||||
if let activeTabView = tabViews.first(where: { $0.active }) {
|
||||
if activeTabView.frame.maxX > (tabContainerView.contentOffset.x + tabContainerBounds.width) {
|
||||
let contentOffset = min(tabContainerView.contentSize.width - tabContainerView.bounds.width, activeTabView.frame.maxX - tabContainerBounds.width)
|
||||
tabContainerView.setContentOffset(CGPoint(x: contentOffset, y: 0), animated: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user