66//
77
88import UIKit
9+ import Later
910
1011/// Horizontal StackView
1112@available ( iOS 9 . 0 , * )
1213public class HStack : UIView {
14+ deinit {
15+ views. resign ( )
16+ }
17+
18+ private var spacing : Float
19+ private var padding : Float
20+ private var alignment : UIStackView . Alignment
21+ private var distribution : UIStackView . Distribution
1322 /// The views that the HStack contains
14- public var views : [ UIView ] = [ ]
23+ public lazy var views = Contract < [ UIView ] > ( initialValue: [ ] )
24+ . onChange { [ weak self] ( views) in
25+ Later . main {
26+ self ? . draw ( views: views ?? [ ] )
27+ }
28+ }
1529
1630 /// Create a HStack
1731 /// - Parameters:
@@ -25,14 +39,13 @@ public class HStack: UIView {
2539 alignment: UIStackView . Alignment = . fill,
2640 distribution: UIStackView . Distribution = . fill,
2741 _ closure: ( ) -> [ UIView ] ) {
28- views = closure ( )
42+ self . spacing = spacing
43+ self . padding = padding
44+ self . alignment = alignment
45+ self . distribution = distribution
2946 super. init ( frame: . zero)
30-
31- hstack ( withSpacing: spacing,
32- padding: padding,
33- alignment: alignment,
34- distribution: distribution,
35- closure)
47+ views. value = closure ( )
48+ draw ( views: views. value ?? [ ] )
3649 }
3750
3851 /// Create a HStack that accepts an array of UIView?
@@ -47,18 +60,26 @@ public class HStack: UIView {
4760 alignment: UIStackView . Alignment = . fill,
4861 distribution: UIStackView . Distribution = . fill,
4962 _ closure: ( ) -> [ UIView ? ] ) {
50- views = closure ( )
51- . compactMap { $0 }
63+ self . spacing = spacing
64+ self . padding = padding
65+ self . alignment = alignment
66+ self . distribution = distribution
5267 super. init ( frame: . zero)
53-
54- hstack ( withSpacing: spacing,
55- padding: padding,
56- alignment: alignment,
57- distribution: distribution)
58- { views }
68+ views. value = closure ( )
69+ . compactMap { $0 }
70+ draw ( views: views. value ?? [ ] )
5971 }
6072
6173 required init ? ( coder aDecoder: NSCoder ) {
6274 fatalError ( " init(coder:) has not been implemented " )
6375 }
76+
77+ internal func draw( views: [ UIView ] ) {
78+ clear ( )
79+ . hstack ( withSpacing: spacing,
80+ padding: padding,
81+ alignment: alignment,
82+ distribution: distribution)
83+ { views }
84+ }
6485}
0 commit comments