diff --git a/README.md b/README.md index 280fdf50..29f04930 100644 --- a/README.md +++ b/README.md @@ -208,6 +208,8 @@ settings.style.buttonBarRightContentInset: CGFloat? // selected bar view is created programmatically so it's important to set up the following 2 properties properly settings.style.selectedBarBackgroundColor = UIColor.black settings.style.selectedBarHeight: CGFloat = 5 +// Optional. If you want a fixed width, otherwise same as item's width. +settings.style.selectedBarWidth: CGFloat? // each buttonBar item is a UICollectionView cell of type ButtonBarViewCell settings.style.buttonBarItemBackgroundColor: UIColor? diff --git a/Sources/XLPagerTabStrip/ButtonBarPagerTabStripViewController.swift b/Sources/XLPagerTabStrip/ButtonBarPagerTabStripViewController.swift index 46464ca9..1d8f4162 100644 --- a/Sources/XLPagerTabStrip/ButtonBarPagerTabStripViewController.swift +++ b/Sources/XLPagerTabStrip/ButtonBarPagerTabStripViewController.swift @@ -51,6 +51,7 @@ public struct ButtonBarPagerTabStripSettings { public var selectedBarBackgroundColor = UIColor.black public var selectedBarHeight: CGFloat = 5 + public var selectedBarWidth: CGFloat? public var selectedBarVerticalAlignment: SelectedBarVerticalAlignment = .bottom public var buttonBarItemBackgroundColor: UIColor? @@ -154,6 +155,7 @@ open class ButtonBarPagerTabStripViewController: PagerTabStripViewController, Pa buttonBarView.selectedBar.backgroundColor = settings.style.selectedBarBackgroundColor buttonBarView.selectedBarHeight = settings.style.selectedBarHeight + buttonBarView.selectedBarWidth = settings.style.selectedBarWidth buttonBarView.selectedBarVerticalAlignment = settings.style.selectedBarVerticalAlignment // register button bar item cell diff --git a/Sources/XLPagerTabStrip/ButtonBarView.swift b/Sources/XLPagerTabStrip/ButtonBarView.swift index a204971e..12a96ed2 100644 --- a/Sources/XLPagerTabStrip/ButtonBarView.swift +++ b/Sources/XLPagerTabStrip/ButtonBarView.swift @@ -46,7 +46,7 @@ public enum SelectedBarVerticalAlignment { open class ButtonBarView: UICollectionView { open lazy var selectedBar: UIView = { [unowned self] in - let bar = UIView(frame: CGRect(x: 0, y: self.frame.size.height - CGFloat(self.selectedBarHeight), width: 0, height: CGFloat(self.selectedBarHeight))) + let bar = UIView(frame: CGRect(x: 0, y: self.frame.size.height - CGFloat(self.selectedBarHeight), width: self.selectedBarWidth ?? 0, height: CGFloat(self.selectedBarHeight))) bar.layer.zPosition = 9999 return bar }() @@ -56,6 +56,7 @@ open class ButtonBarView: UICollectionView { updateSelectedBarYPosition() } } + internal var selectedBarWidth: CGFloat? var selectedBarVerticalAlignment: SelectedBarVerticalAlignment = .bottom var selectedBarAlignment: SelectedBarAlignment = .center var selectedIndex = 0 @@ -97,8 +98,14 @@ open class ButtonBarView: UICollectionView { var targetFrame = fromFrame targetFrame.size.height = selectedBar.frame.size.height - targetFrame.size.width += (toFrame.size.width - fromFrame.size.width) * progressPercentage - targetFrame.origin.x += (toFrame.origin.x - fromFrame.origin.x) * progressPercentage + if let sbWidth = self.selectedBarWidth { + targetFrame.origin.x = (fromFrame.origin.x + (fromFrame.width - sbWidth) / 2) + + ((toFrame.origin.x + toFrame.width / 2) - (fromFrame.origin.x + fromFrame.width / 2)) * progressPercentage + targetFrame.size.width = sbWidth + } else { + targetFrame.size.width += (toFrame.size.width - fromFrame.size.width) * progressPercentage + targetFrame.origin.x += (toFrame.origin.x - fromFrame.origin.x) * progressPercentage + } selectedBar.frame = CGRect(x: targetFrame.origin.x, y: selectedBar.frame.origin.y, width: targetFrame.size.width, height: selectedBar.frame.size.height) @@ -122,8 +129,13 @@ open class ButtonBarView: UICollectionView { updateContentOffset(animated: animated, pagerScroll: pagerScroll, toFrame: selectedCellFrame, toIndex: (selectedCellIndexPath as NSIndexPath).row) - selectedBarFrame.size.width = selectedCellFrame.size.width - selectedBarFrame.origin.x = selectedCellFrame.origin.x + if let sbWidth = self.selectedBarWidth { + selectedBarFrame.size.width = sbWidth + selectedBarFrame.origin.x = selectedCellFrame.origin.x + (selectedCellFrame.width - sbWidth) / 2 + } else { + selectedBarFrame.size.width = selectedCellFrame.size.width + selectedBarFrame.origin.x = selectedCellFrame.origin.x + } if animated { UIView.animate(withDuration: 0.3, animations: { [weak self] in diff --git a/XLPagerTabStrip.podspec b/XLPagerTabStrip.podspec index a3481c23..1383c81b 100644 --- a/XLPagerTabStrip.podspec +++ b/XLPagerTabStrip.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "XLPagerTabStrip" - s.version = "9.1.0" + s.version = "9.1.1" s.summary = "Android PagerTabStrip for iOS and much more." s.homepage = "https://github.com/xmartlabs/XLPagerTabStrip" s.license = { type: 'MIT', file: 'LICENSE' }