6
6
//
7
7
8
8
import UIKit
9
+ import Later
9
10
10
11
/// Horizontal StackView
11
12
@available ( iOS 9 . 0 , * )
12
13
public 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
13
22
/// 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
+ }
15
29
16
30
/// Create a HStack
17
31
/// - Parameters:
@@ -25,14 +39,13 @@ public class HStack: UIView {
25
39
alignment: UIStackView . Alignment = . fill,
26
40
distribution: UIStackView . Distribution = . fill,
27
41
_ closure: ( ) -> [ UIView ] ) {
28
- views = closure ( )
42
+ self . spacing = spacing
43
+ self . padding = padding
44
+ self . alignment = alignment
45
+ self . distribution = distribution
29
46
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 ?? [ ] )
36
49
}
37
50
38
51
/// Create a HStack that accepts an array of UIView?
@@ -47,18 +60,26 @@ public class HStack: UIView {
47
60
alignment: UIStackView . Alignment = . fill,
48
61
distribution: UIStackView . Distribution = . fill,
49
62
_ closure: ( ) -> [ UIView ? ] ) {
50
- views = closure ( )
51
- . compactMap { $0 }
63
+ self . spacing = spacing
64
+ self . padding = padding
65
+ self . alignment = alignment
66
+ self . distribution = distribution
52
67
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 ?? [ ] )
59
71
}
60
72
61
73
required init ? ( coder aDecoder: NSCoder ) {
62
74
fatalError ( " init(coder:) has not been implemented " )
63
75
}
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
+ }
64
85
}
0 commit comments