@@ -2,7 +2,6 @@ import UIKit
22import RxSwift
33import RxCocoa
44
5-
65public final class StackBarButtonItem {
76 /// NavigationBarButtonItem Position
87 ///
@@ -12,27 +11,26 @@ public final class StackBarButtonItem {
1211 case right
1312 case left
1413 }
15-
14+
1615 /// dispose variable
1716 private var compositeDisposable = CompositeDisposable ( )
1817 private let disposeBag = DisposeBag ( )
19-
18+
2019 /// use in navigation margin setting
2120 private let marginItem : UIBarButtonItem = UIBarButtonItem ( barButtonSystemItem: . fixedSpace, target: nil , action: nil )
22-
21+
2322 private weak var navigationItem : UINavigationItem ?
24- private let position : BarButtonPosition
25-
23+ private let position : BarButtonPosition
24+
2625 init ( navigationItem: UINavigationItem , position: BarButtonPosition ) {
2726 self . navigationItem = navigationItem
2827 self . position = position
2928 }
3029}
3130
32-
3331// MARK: public method
34- public extension StackBarButtonItem {
35-
32+ public extension StackBarButtonItem {
33+
3634 /// Set stackView on the right or left side of the navigation bar
3735 ///
3836 ///
@@ -44,12 +42,12 @@ public extension StackBarButtonItem{
4442 /// - animated: Animation flag
4543 func setStackBarButtonItems( views: [ UIView ] , spacing: CGFloat = 0 , margin: CGFloat = 0 , reversed: Bool = false , animated: Bool = false ) {
4644 disposeAll ( )
47-
45+
4846 var items : [ UIBarButtonItem ] = [ ]
4947 if !views. isEmpty {
5048 items = configureItems ( views: views, spacing: spacing, margin: margin, reversed: reversed, animated: animated)
5149 }
52-
50+
5351 switch self . position {
5452 case . right:
5553 self . navigationItem? . setRightBarButtonItems ( items, animated: animated)
@@ -61,20 +59,20 @@ public extension StackBarButtonItem{
6159
6260// MARK: private method
6361private extension StackBarButtonItem {
64-
62+
6563 /// compositeDisposable dispose and assign CompositeDisposable
6664 func disposeAll( ) {
6765 if compositeDisposable. count != 0 {
6866 compositeDisposable. dispose ( )
6967 compositeDisposable = CompositeDisposable ( )
7068 }
7169 }
72-
70+
7371 func addDisposable( _ disposable: Disposable ) {
7472 _ = compositeDisposable. insert ( disposable)
7573 disposable. disposed ( by: disposeBag)
7674 }
77-
75+
7876 /// Configure UIBarButtonItems
7977 ///
8078 ///
@@ -85,16 +83,16 @@ private extension StackBarButtonItem {
8583 /// - reversed: Switch view order
8684 /// - animated: Animation flag
8785 /// - Returns: configured items
88- func configureItems( views: [ UIView ] , spacing: CGFloat = 0 , margin: CGFloat = 0 , reversed: Bool = false , animated: Bool = false ) -> [ UIBarButtonItem ] {
86+ func configureItems( views: [ UIView ] , spacing: CGFloat = 0 , margin: CGFloat = 0 , reversed: Bool = false , animated: Bool = false ) -> [ UIBarButtonItem ] {
8987 let views = reversed ? views. reversed ( ) : views
90-
88+
9189 let baseStackView = createBaseStackView ( barButtonPosition: self . position, views: views, spacing: spacing, margin: margin)
9290 let items = convertIntoItems ( baseStackView)
93-
91+
9492 congifureNavigationMargin ( barButtonPosition: self . position, childStackView: baseStackView)
9593 return items
9694 }
97-
95+
9896 /// Create BaseStackView to embed in BarButtonItem. baseStackView includes childStackView(views and spacing) and margin view
9997 /// - Parameters:
10098 /// - barButtonPosition: right or left
@@ -105,14 +103,14 @@ private extension StackBarButtonItem {
105103 func createBaseStackView( barButtonPosition: BarButtonPosition , views: [ UIView ] , spacing: CGFloat = 0 , margin: CGFloat = 0 ) -> UIStackView {
106104 let childStackView = createChildStackView ( views: views, spacing: spacing)
107105 let baseStackView = UIStackView ( arrangedSubviews: [ childStackView] )
108-
106+
109107 baseStackView. configure ( spacing: 0 )
110108 baseStackView. addMarginView ( barButtonPosition: self . position, margin: margin)
111109 baseStackView. updateFrameSize ( )
112-
110+
113111 return baseStackView
114112 }
115-
113+
116114 /// Create childStackView. childStackView includes views and spacing
117115 /// - Parameters:
118116 /// - views: An array of views to display on the right or left side of the navigation bar
@@ -122,10 +120,10 @@ private extension StackBarButtonItem {
122120 let childStackView = UIStackView ( arrangedSubviews: views)
123121 childStackView. configure ( spacing: spacing)
124122 childStackView. updateFrameSize ( )
125-
123+
126124 return childStackView
127125 }
128-
126+
129127 /// Configure navigationMargin
130128 ///
131129 /// - Parameters:
@@ -138,7 +136,7 @@ private extension StackBarButtonItem {
138136 configureMinusMargin ( )
139137 }
140138 }
141-
139+
142140 /// Convert stackView(customView) into BarButtonItem
143141 ///
144142 /// - Parameter stackView: CustomView of BarButtonItem
@@ -154,18 +152,17 @@ private extension StackBarButtonItem {
154152 }
155153}
156154
157-
158155// MARK: iOS11 or later private method
159156@available ( iOS 11 , * )
160157private extension StackBarButtonItem {
161-
158+
162159 /// Hide extra margin view
163160 ///
164161 /// - Parameters:
165162 /// - barButtonPosition: right or left
166163 /// - childStackView: StackView for embedding in BarButtonItem
167164 func hideExtraMarginView( _ barButtonPosition: BarButtonPosition , _ childStackView: UIStackView ) {
168-
165+
169166 let disposable = childStackView. rx. methodInvoked ( #selector( UIView . didMoveToSuperview) )
170167 . observeOn ( ConcurrentMainScheduler . instance)
171168 . flatMap { [ weak childStackView] _ -> Observable < UIStackView > in
@@ -191,10 +188,10 @@ private extension StackBarButtonItem {
191188 . filter { type ( of: $0) != UIStackView . self }
192189 . forEach { $0. isHidden = true }
193190 } )
194-
191+
195192 addDisposable ( disposable)
196193 }
197-
194+
198195 /// Check didAddSubView timing
199196 ///
200197 /// - Parameter stackView: superView of childStackView
@@ -208,24 +205,24 @@ private extension StackBarButtonItem {
208205// MARK: iOS10 or less private method
209206@available ( iOS, introduced: 9.0 , obsoleted: 11.0 )
210207private extension StackBarButtonItem {
211-
208+
212209 /// Configure margin width
213210 func configureMinusMargin( ) {
214211 guard let rootVC = UIApplication . shared. delegate? . window?? . rootViewController? . children. first else { return }
215-
212+
216213 // observe viewWillLayoutSubviews(transition)
217214 let disposable = rootVC. rx. methodInvoked ( #selector( UIViewController . viewWillLayoutSubviews) )
218215 . observeOn ( ConcurrentMainScheduler . instance)
219216 . subscribe ( onNext: { [ weak self] ( _) in
220217 guard let me = self else { return }
221-
218+
222219 // configure margin
223220 me. marginItem. width = me. minusMargin ( rootVC. traitCollection)
224221 } )
225-
222+
226223 addDisposable ( disposable)
227224 }
228-
225+
229226 /// Minus margin width in case of iOS 10 or or less
230227 ///
231228 /// - Parameter traitCollection: Use for iPhone Orientation
@@ -234,7 +231,7 @@ private extension StackBarButtonItem {
234231 if UIDevice . current. isPad || UIDevice . current. isPlus {
235232 return - 20
236233 }
237-
234+
238235 // iPhone
239236 return traitCollection. verticalSizeClass == . regular ? - 16 : - 20
240237 }
0 commit comments