blob: 5106cb0caa7926683e5b143da86042863bb8a7cc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#import "UIView+MGLAdditions.h"
@implementation UIView (MGLAdditions)
- (UIViewController *)mgl_viewControllerForLayoutGuides
{
// Per -[UIResponder nextResponder] documentation, a UIView’s next responder
// is its managing UIViewController if applicable, or otherwise its
// superview. UIWindow’s next responder is UIApplication, which has no next
// responder.
UIResponder *laterResponder = self;
while ([laterResponder isKindOfClass:[UIView class]])
{
laterResponder = laterResponder.nextResponder;
}
if ([laterResponder isKindOfClass:[UIViewController class]])
{
return (UIViewController *)laterResponder;
}
return nil;
}
- (NSLayoutYAxisAnchor *)mgl_safeTopAnchor {
if (@available(iOS 11.0, *)) {
return self.safeAreaLayoutGuide.topAnchor;
} else {
UIViewController *viewController = self.mgl_viewControllerForLayoutGuides;
BOOL useLayoutGuides = viewController.view && viewController.automaticallyAdjustsScrollViewInsets;
if (useLayoutGuides) {
return viewController.topLayoutGuide.bottomAnchor;
}
else {
return self.topAnchor;
}
}
}
- (NSLayoutXAxisAnchor *)mgl_safeLeadingAnchor {
if (@available(iOS 11.0, *)) {
return self.safeAreaLayoutGuide.leadingAnchor;
} else {
return self.leadingAnchor;
}
}
- (NSLayoutYAxisAnchor *)mgl_safeBottomAnchor {
if (@available(iOS 11.0, *)) {
return self.safeAreaLayoutGuide.bottomAnchor;
} else {
UIViewController *viewController = self.mgl_viewControllerForLayoutGuides;
BOOL useLayoutGuides = viewController.view && viewController.automaticallyAdjustsScrollViewInsets;
if (useLayoutGuides) {
return viewController.bottomLayoutGuide.topAnchor;
}
else {
return self.bottomAnchor;
}
}
}
- (NSLayoutXAxisAnchor *)mgl_safeTrailingAnchor {
if (@available(iOS 11.0, *)) {
return self.safeAreaLayoutGuide.trailingAnchor;
} else {
return self.trailingAnchor;
}
}
- (CGRect)mgl_frameForTransformIdentity {
CGPoint center = self.center;
CGSize size = self.bounds.size;
return CGRectMake(
center.x - size.width / 2,
center.y - size.height / 2,
size.width,
size.height
);
}
@end
|