@@ -11,91 +11,73 @@ static partial class StatusBar
11
11
/// <summary>
12
12
/// Method to update the status bar size.
13
13
/// </summary>
14
- public static void UpdateBarSize ( )
14
+ public static void SetBarSize ( bool isUsingSafeArea )
15
15
{
16
- if ( OperatingSystem . IsIOSVersionAtLeast ( 13 ) )
16
+ var communityToolkitStatusBarTag = new IntPtr ( 38482 ) ;
17
+ foreach ( var window in UIApplication . SharedApplication . Windows )
17
18
{
18
- var statusBarTag = new IntPtr ( 38482 ) ;
19
- foreach ( var window in UIApplication . SharedApplication . Windows )
19
+ var statusBarFrame = window . WindowScene ? . StatusBarManager ? . StatusBarFrame ;
20
+ if ( statusBarFrame is null )
20
21
{
21
- var statusBar = window . ViewWithTag ( statusBarTag ) ;
22
- var statusBarFrame = window . WindowScene ? . StatusBarManager ? . StatusBarFrame ;
23
- if ( statusBarFrame is null )
24
- {
25
- continue ;
26
- }
27
-
28
- statusBar ??= new UIView ( statusBarFrame . Value ) ;
29
- statusBar . Tag = statusBarTag ;
30
- statusBar . Frame = UIApplication . SharedApplication . StatusBarFrame ;
31
- var statusBarSubViews = window . Subviews . Where ( x => x . Tag == statusBarTag ) . ToList ( ) ;
32
- foreach ( var statusBarSubView in statusBarSubViews )
33
- {
34
- statusBarSubView . RemoveFromSuperview ( ) ;
35
- }
36
-
37
- window . AddSubview ( statusBar ) ;
38
-
39
- TryUpdateStatusBarAppearance ( window ) ;
22
+ continue ;
40
23
}
41
- }
42
- else
43
- {
44
- if ( UIApplication . SharedApplication . ValueForKey ( new NSString ( "statusBar" ) ) is UIView statusBar )
24
+
25
+ var statusBar = window . ViewWithTag ( communityToolkitStatusBarTag ) ?? new UIView ( statusBarFrame . Value ) ;
26
+ statusBar . Tag = communityToolkitStatusBarTag ;
27
+ statusBar . Frame = GetStatusBarFrame ( window , isUsingSafeArea ) ;
28
+
29
+ var statusBarSubViews = window . Subviews . Where ( x => x . Tag == communityToolkitStatusBarTag ) . ToList ( ) ;
30
+ foreach ( var statusBarSubView in statusBarSubViews )
45
31
{
46
- statusBar . Frame = UIApplication . SharedApplication . StatusBarFrame ;
32
+ statusBarSubView . RemoveFromSuperview ( ) ;
47
33
}
48
34
49
- TryUpdateStatusBarAppearance ( ) ;
35
+ window . AddSubview ( statusBar ) ;
36
+
37
+ TryUpdateStatusBarAppearance ( window ) ;
50
38
}
51
39
}
52
40
53
41
static void PlatformSetColor ( Color color )
54
42
{
55
43
var uiColor = color . ToPlatform ( ) ;
56
-
57
- if ( OperatingSystem . IsIOSVersionAtLeast ( 13 ) )
44
+
45
+ var statusBarTag = new IntPtr ( 38482 ) ;
46
+ foreach ( var window in UIApplication . SharedApplication . Windows )
58
47
{
59
- var statusBarTag = new IntPtr ( 38482 ) ;
60
- foreach ( var window in UIApplication . SharedApplication . Windows )
48
+ var statusBar = window . ViewWithTag ( statusBarTag ) ;
49
+ var statusBarFrame = window . WindowScene ? . StatusBarManager ? . StatusBarFrame ;
50
+ if ( statusBarFrame is null )
61
51
{
62
- var statusBar = window . ViewWithTag ( statusBarTag ) ;
63
- var statusBarFrame = window . WindowScene ? . StatusBarManager ? . StatusBarFrame ;
64
- if ( statusBarFrame is null )
65
- {
66
- continue ;
67
- }
68
-
69
- // ReSharper disable once NullCoalescingConditionIsAlwaysNotNullAccordingToAPIContract
70
- // window.ViewWithTag(tag) can return null
71
- statusBar ??= new UIView ( statusBarFrame . Value ) ;
72
- statusBar . Tag = statusBarTag ;
73
- statusBar . BackgroundColor = uiColor ;
74
- statusBar . TintColor = uiColor ;
75
- statusBar . Frame = UIApplication . SharedApplication . StatusBarFrame ;
76
- var statusBarSubViews = window . Subviews . Where ( x => x . Tag == statusBarTag ) . ToList ( ) ;
77
- foreach ( var statusBarSubView in statusBarSubViews )
78
- {
79
- statusBarSubView . RemoveFromSuperview ( ) ;
80
- }
81
-
82
- window . AddSubview ( statusBar ) ;
83
-
84
- TryUpdateStatusBarAppearance ( window ) ;
52
+ continue ;
85
53
}
86
- }
87
- else
88
- {
89
- if ( UIApplication . SharedApplication . ValueForKey ( new NSString ( "statusBar" ) ) is UIView statusBar
90
- && statusBar . RespondsToSelector ( new ObjCRuntime . Selector ( "setBackgroundColor:" ) ) )
54
+
55
+ statusBar ??= new UIView ( statusBarFrame . Value ) ;
56
+ statusBar . Tag = statusBarTag ;
57
+ statusBar . BackgroundColor = uiColor ;
58
+ statusBar . TintColor = uiColor ;
59
+
60
+ var statusBarSubViews = window . Subviews . Where ( x => x . Tag == statusBarTag ) . ToList ( ) ;
61
+ foreach ( var statusBarSubView in statusBarSubViews )
91
62
{
92
- statusBar . BackgroundColor = uiColor ;
63
+ statusBarSubView . RemoveFromSuperview ( ) ;
93
64
}
94
65
95
- TryUpdateStatusBarAppearance ( ) ;
66
+ window . AddSubview ( statusBar ) ;
67
+
68
+ TryUpdateStatusBarAppearance ( window ) ;
96
69
}
97
70
}
98
71
72
+ static CGRect GetStatusBarFrame ( in UIWindow window , in bool isUsingSafeArea )
73
+ {
74
+ var statusBarFrame = UIApplication . SharedApplication . StatusBarFrame ;
75
+
76
+ return isUsingSafeArea
77
+ ? new CGRect ( statusBarFrame . X , statusBarFrame . Y , statusBarFrame . Width , window . SafeAreaInsets . Top )
78
+ : statusBarFrame ;
79
+ }
80
+
99
81
static void PlatformSetStyle ( StatusBarStyle statusBarStyle )
100
82
{
101
83
var uiStyle = statusBarStyle switch
@@ -113,22 +95,14 @@ static void PlatformSetStyle(StatusBarStyle statusBarStyle)
113
95
114
96
static bool TryUpdateStatusBarAppearance ( )
115
97
{
116
- if ( OperatingSystem . IsIOSVersionAtLeast ( 13 ) )
117
- {
118
- var didUpdateAllStatusBars = true ;
98
+ var didUpdateAllStatusBars = true ;
119
99
120
- foreach ( var window in UIApplication . SharedApplication . Windows )
121
- {
122
- didUpdateAllStatusBars &= TryUpdateStatusBarAppearance ( window ) ;
123
- }
124
-
125
- return didUpdateAllStatusBars ;
126
- }
127
- else
100
+ foreach ( var window in UIApplication . SharedApplication . Windows )
128
101
{
129
- var window = UIApplication . SharedApplication . KeyWindow ;
130
- return TryUpdateStatusBarAppearance ( window ) ;
102
+ didUpdateAllStatusBars &= TryUpdateStatusBarAppearance ( window ) ;
131
103
}
104
+
105
+ return didUpdateAllStatusBars ;
132
106
}
133
107
134
108
static bool TryUpdateStatusBarAppearance ( UIWindow ? window )
0 commit comments