From e89c184552349286c7873cb6485a4ef32333a7c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Folta=CC=81nyi=20Kolos?= <> Date: Thu, 10 Oct 2019 16:18:12 +0200 Subject: [PATCH 1/2] Adds segment spacaing --- Example/BetterSegmentedControl/ViewController.swift | 1 + Pod/Classes/BetterSegmentedControl.swift | 8 ++++++-- Pod/Classes/Options.swift | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) 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..b8b5ad6 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 } } } @@ -173,6 +175,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 +330,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) } From 335c1c0371ffb8a2ba70ddb2071fa3bbf5bea286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Folta=CC=81nyi=20Kolos?= <> Date: Thu, 10 Oct 2019 16:47:57 +0200 Subject: [PATCH 2/2] Adds segmentSpacing property --- Pod/Classes/BetterSegmentedControl.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Pod/Classes/BetterSegmentedControl.swift b/Pod/Classes/BetterSegmentedControl.swift index b8b5ad6..aa2b99f 100644 --- a/Pod/Classes/BetterSegmentedControl.swift +++ b/Pod/Classes/BetterSegmentedControl.swift @@ -159,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() @@ -175,7 +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 var totalSpacings: CGFloat { return segmentSpacing * CGFloat(normalSegmentCount - 1) } private lazy var defaultSegments: [BetterSegmentedControlSegment] = { return [LabelSegment(text: "First"), LabelSegment(text: "Second")] }()