@@ -92,8 +92,8 @@ class PinLayoutImpl: PinLayout {
92
92
@discardableResult
93
93
func top( _ percent: Percent ) -> PinLayout {
94
94
func context( ) -> String { return " top( \( percent. description) ) " }
95
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
96
- setTop ( percent. of ( layoutSuperview . frame . height) , context)
95
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
96
+ setTop ( percent. of ( layoutSuperviewRect . height) , context)
97
97
return self
98
98
}
99
99
@@ -142,8 +142,8 @@ class PinLayoutImpl: PinLayout {
142
142
@discardableResult
143
143
func bottom( _ percent: Percent ) -> PinLayout {
144
144
func context( ) -> String { return " bottom( \( percent. description) ) " }
145
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
146
- bottom ( percent. of ( layoutSuperview . frame . height) , context)
145
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
146
+ bottom ( percent. of ( layoutSuperviewRect . height) , context)
147
147
return self
148
148
}
149
149
@@ -181,48 +181,48 @@ class PinLayoutImpl: PinLayout {
181
181
@discardableResult
182
182
func hCenter( ) -> PinLayout {
183
183
func context( ) -> String { return " hCenter() " }
184
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
185
- setHorizontalCenter ( layoutSuperview . frame . width / 2 , context)
184
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
185
+ setHorizontalCenter ( layoutSuperviewRect . width / 2 , context)
186
186
return self
187
187
}
188
188
189
189
@discardableResult
190
190
func hCenter( _ value: CGFloat ) -> PinLayout {
191
191
func context( ) -> String { return " hCenter( \( value) ) " }
192
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
193
- setHorizontalCenter ( ( layoutSuperview . frame . width / 2 ) + value, context)
192
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
193
+ setHorizontalCenter ( ( layoutSuperviewRect . width / 2 ) + value, context)
194
194
return self
195
195
}
196
196
197
197
@discardableResult
198
198
func hCenter( _ percent: Percent ) -> PinLayout {
199
199
func context( ) -> String { return " hCenter( \( percent. description) ) " }
200
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
201
- setHorizontalCenter ( ( layoutSuperview . frame . width / 2 ) + percent. of ( layoutSuperview . frame . width) , context)
200
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
201
+ setHorizontalCenter ( ( layoutSuperviewRect . width / 2 ) + percent. of ( layoutSuperviewRect . width) , context)
202
202
return self
203
203
}
204
204
205
205
@discardableResult
206
206
func vCenter( ) -> PinLayout {
207
207
func context( ) -> String { return " vCenter() " }
208
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
209
- setVerticalCenter ( layoutSuperview . frame . height / 2 , context)
208
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
209
+ setVerticalCenter ( layoutSuperviewRect . height / 2 , context)
210
210
return self
211
211
}
212
212
213
213
@discardableResult
214
214
func vCenter( _ value: CGFloat ) -> PinLayout {
215
215
func context( ) -> String { return " vCenter( \( value) ) " }
216
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
217
- setVerticalCenter ( ( layoutSuperview . frame . height / 2 ) + value, context)
216
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
217
+ setVerticalCenter ( ( layoutSuperviewRect . height / 2 ) + value, context)
218
218
return self
219
219
}
220
220
221
221
@discardableResult
222
222
func vCenter( _ percent: Percent ) -> PinLayout {
223
223
func context( ) -> String { return " vCenter( \( percent. description) ) " }
224
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
225
- setVerticalCenter ( ( layoutSuperview . frame . height / 2 ) + percent. of ( layoutSuperview . frame . height) , context)
224
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
225
+ setVerticalCenter ( ( layoutSuperviewRect . height / 2 ) + percent. of ( layoutSuperviewRect . height) , context)
226
226
return self
227
227
}
228
228
@@ -375,8 +375,8 @@ class PinLayoutImpl: PinLayout {
375
375
@discardableResult
376
376
func topCenter( ) -> PinLayout {
377
377
func context( ) -> String { return " topCenter() " }
378
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
379
- setTopCenter ( CGPoint ( x: layoutSuperview . frame . width / 2 , y: 0 ) , context)
378
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
379
+ setTopCenter ( CGPoint ( x: layoutSuperviewRect . width / 2 , y: 0 ) , context)
380
380
return self
381
381
}
382
382
@@ -395,8 +395,8 @@ class PinLayoutImpl: PinLayout {
395
395
}
396
396
397
397
fileprivate func topRight( _ context: Context ) -> PinLayout {
398
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
399
- setTopRight ( CGPoint ( x: layoutSuperview . frame . width, y: 0 ) , context)
398
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
399
+ setTopRight ( CGPoint ( x: layoutSuperviewRect . width, y: 0 ) , context)
400
400
return self
401
401
}
402
402
@@ -431,8 +431,8 @@ class PinLayoutImpl: PinLayout {
431
431
}
432
432
433
433
fileprivate func centerLeft( _ context: Context ) -> PinLayout {
434
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
435
- setCenterLeft ( CGPoint ( x: 0 , y: layoutSuperview . frame . height / 2 ) , context)
434
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
435
+ setCenterLeft ( CGPoint ( x: 0 , y: layoutSuperviewRect . height / 2 ) , context)
436
436
return self
437
437
}
438
438
@@ -464,8 +464,8 @@ class PinLayoutImpl: PinLayout {
464
464
@discardableResult
465
465
func center( ) -> PinLayout {
466
466
func context( ) -> String { return " center() " }
467
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
468
- setCenter ( CGPoint ( x: layoutSuperview . frame . width / 2 , y: layoutSuperview . frame . height / 2 ) , context)
467
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
468
+ setCenter ( CGPoint ( x: layoutSuperviewRect . width / 2 , y: layoutSuperviewRect . height / 2 ) , context)
469
469
return self
470
470
}
471
471
@@ -485,8 +485,8 @@ class PinLayoutImpl: PinLayout {
485
485
486
486
@discardableResult
487
487
fileprivate func centerRight( _ context: Context ) -> PinLayout {
488
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
489
- setCenterRight ( CGPoint ( x: layoutSuperview . frame . width, y: layoutSuperview . frame . height / 2 ) , context)
488
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
489
+ setCenterRight ( CGPoint ( x: layoutSuperviewRect . width, y: layoutSuperviewRect . height / 2 ) , context)
490
490
return self
491
491
}
492
492
@@ -522,8 +522,8 @@ class PinLayoutImpl: PinLayout {
522
522
523
523
@discardableResult
524
524
fileprivate func bottomLeft( _ context: Context ) -> PinLayout {
525
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
526
- setBottomLeft ( CGPoint ( x: 0 , y: layoutSuperview . frame . height) , context)
525
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
526
+ setBottomLeft ( CGPoint ( x: 0 , y: layoutSuperviewRect . height) , context)
527
527
return self
528
528
}
529
529
@@ -555,8 +555,8 @@ class PinLayoutImpl: PinLayout {
555
555
@discardableResult
556
556
func bottomCenter( ) -> PinLayout {
557
557
func context( ) -> String { return " bottomCenter() " }
558
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
559
- setBottomCenter ( CGPoint ( x: layoutSuperview . frame . width / 2 , y: layoutSuperview . frame . height) , context)
558
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
559
+ setBottomCenter ( CGPoint ( x: layoutSuperviewRect . width / 2 , y: layoutSuperviewRect . height) , context)
560
560
return self
561
561
}
562
562
@@ -576,8 +576,8 @@ class PinLayoutImpl: PinLayout {
576
576
577
577
@discardableResult
578
578
fileprivate func bottomRight( _ context: Context ) -> PinLayout {
579
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
580
- setBottomRight ( CGPoint ( x: layoutSuperview . frame . width, y: layoutSuperview . frame . height) , context)
579
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
580
+ setBottomRight ( CGPoint ( x: layoutSuperviewRect . width, y: layoutSuperviewRect . height) , context)
581
581
return self
582
582
}
583
583
@@ -608,8 +608,8 @@ class PinLayoutImpl: PinLayout {
608
608
@discardableResult
609
609
func width( _ percent: Percent ) -> PinLayout {
610
610
func context( ) -> String { return " width( \( percent. description) ) " }
611
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
612
- return setWidth ( percent. of ( layoutSuperview . frame . width) , context)
611
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
612
+ return setWidth ( percent. of ( layoutSuperviewRect . width) , context)
613
613
}
614
614
615
615
@discardableResult
@@ -626,8 +626,8 @@ class PinLayoutImpl: PinLayout {
626
626
@discardableResult
627
627
func minWidth( _ percent: Percent ) -> PinLayout {
628
628
func context( ) -> String { return " minWidth( \( percent. description) ) " }
629
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
630
- return setMinWidth ( percent. of ( layoutSuperview . frame . width) , context)
629
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
630
+ return setMinWidth ( percent. of ( layoutSuperviewRect . width) , context)
631
631
}
632
632
633
633
@discardableResult
@@ -639,8 +639,8 @@ class PinLayoutImpl: PinLayout {
639
639
@discardableResult
640
640
func maxWidth( _ percent: Percent ) -> PinLayout {
641
641
func context( ) -> String { return " maxWidth( \( percent. description) ) " }
642
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
643
- return setMaxWidth ( percent. of ( layoutSuperview . frame . width) , context)
642
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
643
+ return setMaxWidth ( percent. of ( layoutSuperviewRect . width) , context)
644
644
}
645
645
646
646
@discardableResult
@@ -651,8 +651,8 @@ class PinLayoutImpl: PinLayout {
651
651
@discardableResult
652
652
func height( _ percent: Percent ) -> PinLayout {
653
653
func context( ) -> String { return " height( \( percent. description) ) " }
654
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
655
- return setHeight ( percent. of ( layoutSuperview . frame . height) , context)
654
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
655
+ return setHeight ( percent. of ( layoutSuperviewRect . height) , context)
656
656
}
657
657
658
658
@discardableResult
@@ -669,8 +669,8 @@ class PinLayoutImpl: PinLayout {
669
669
@discardableResult
670
670
func minHeight( _ percent: Percent ) -> PinLayout {
671
671
func context( ) -> String { return " minHeight( \( percent. description) ) " }
672
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
673
- return setMinHeight ( percent. of ( layoutSuperview . frame . height) , context)
672
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
673
+ return setMinHeight ( percent. of ( layoutSuperviewRect . height) , context)
674
674
}
675
675
676
676
@discardableResult
@@ -682,8 +682,8 @@ class PinLayoutImpl: PinLayout {
682
682
@discardableResult
683
683
func maxHeight( _ percent: Percent ) -> PinLayout {
684
684
func context( ) -> String { return " maxHeight( \( percent. description) ) " }
685
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
686
- return setMaxHeight ( percent. of ( layoutSuperview . frame . height) , context)
685
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
686
+ return setMaxHeight ( percent. of ( layoutSuperviewRect . height) , context)
687
687
}
688
688
689
689
//
@@ -702,8 +702,8 @@ class PinLayoutImpl: PinLayout {
702
702
@discardableResult
703
703
func size( _ percent: Percent ) -> PinLayout {
704
704
func context( ) -> String { return " size( \( percent. description) ) " }
705
- guard let layoutSuperview = layoutSuperview ( context) else { return self }
706
- let size = CGSize ( width: percent. of ( layoutSuperview . frame . width) , height: percent. of ( layoutSuperview . frame . height) )
705
+ guard let layoutSuperviewRect = layoutSuperviewRect ( context) else { return self }
706
+ let size = CGSize ( width: percent. of ( layoutSuperviewRect . width) , height: percent. of ( layoutSuperviewRect . height) )
707
707
return setSize ( size, context)
708
708
}
709
709
@@ -914,6 +914,15 @@ extension PinLayoutImpl {
914
914
return self
915
915
}
916
916
917
+ internal func layoutSuperviewRect( _ context: Context ) -> CGRect ? {
918
+ if let superview = view. superview {
919
+ return Coordinates . getUntransformedViewRect ( superview)
920
+ } else {
921
+ warnWontBeApplied ( " the view must be added as a sub-view before being layouted using this method. " , context)
922
+ return nil
923
+ }
924
+ }
925
+
917
926
internal func layoutSuperview( _ context: Context ) -> UIView ? {
918
927
if let superview = view. superview {
919
928
return superview
@@ -923,6 +932,7 @@ extension PinLayoutImpl {
923
932
}
924
933
}
925
934
935
+ // CHECK THIS!!!
926
936
internal func referenceSuperview( _ referenceView: UIView , _ context: Context ) -> UIView ? {
927
937
if let superview = referenceView. superview {
928
938
return superview
0 commit comments