diff --git a/Example/BetterSegmentedControl/ViewController.swift b/Example/BetterSegmentedControl/ViewController.swift index 1cdd018..d74f38e 100644 --- a/Example/BetterSegmentedControl/ViewController.swift +++ b/Example/BetterSegmentedControl/ViewController.swift @@ -36,6 +36,7 @@ class ViewController: UIViewController { control1.segments = LabelSegment.segments(withTitles: ["Recent", "Nearby", "All"], normalFont: UIFont(name: "HelveticaNeue-Light", size: 13.0)!, selectedFont: UIFont(name: "HelveticaNeue-Medium", size: 13.0)!) + control1.segmentSpacing = 50 // Control 2: Exclusively defined in IB // Control 3: Many options diff --git a/Pod/Classes/BetterSegmentedControl.swift b/Pod/Classes/BetterSegmentedControl.swift index c7710f8..aa2b99f 100644 --- a/Pod/Classes/BetterSegmentedControl.swift +++ b/Pod/Classes/BetterSegmentedControl.swift @@ -100,6 +100,8 @@ import Foundation cornerRadius = value case let .bouncesOnChange(value): bouncesOnChange = value + case let .segmentSpacing(value): + segmentSpacing = value } } } @@ -157,6 +159,10 @@ import Foundation indicatorView.layer.borderColor = newValue?.cgColor } } + /// The horizontal spacing between segments. + @IBInspectable public var segmentSpacing: CGFloat = 0 { + didSet { setNeedsLayout() } + } // MARK: Private properties private let normalSegmentsView = UIView() @@ -173,6 +179,7 @@ import Foundation private var selectedSegments: [UIView] { return selectedSegmentsView.subviews } private var segmentViews: [UIView] { return normalSegments + selectedSegments } private var totalInsetSize: CGFloat { return indicatorViewInset * 2.0 } + private var totalSpacings: CGFloat { return segmentSpacing * CGFloat(normalSegmentCount - 1) } private lazy var defaultSegments: [BetterSegmentedControlSegment] = { return [LabelSegment(text: "First"), LabelSegment(text: "Second")] }() @@ -327,8 +334,9 @@ import Foundation // MARK: Helpers private func elementFrame(forIndex index: Int) -> CGRect { - let elementWidth = (width - totalInsetSize) / CGFloat(normalSegmentCount) - let x = CGFloat(isLayoutDirectionRightToLeft ? lastIndex - index : index) * elementWidth + let elementWidth = (width - totalInsetSize - totalSpacings) / CGFloat(normalSegmentCount) + let spacingOffset = CGFloat(index) * segmentSpacing + let x = CGFloat(isLayoutDirectionRightToLeft ? lastIndex - index : index) * elementWidth + spacingOffset return CGRect(x: x + indicatorViewInset, y: indicatorViewInset, width: elementWidth, diff --git a/Pod/Classes/Options.swift b/Pod/Classes/Options.swift index acad9b9..e8eb677 100644 --- a/Pod/Classes/Options.swift +++ b/Pod/Classes/Options.swift @@ -24,4 +24,5 @@ public enum BetterSegmentedControlOption { case backgroundColor(UIColor) case cornerRadius(CGFloat) case bouncesOnChange(Bool) + case segmentSpacing(CGFloat) }