diff --git a/samples/CommunityToolkit.Maui.Sample/Pages/Behaviors/StatusBarBehaviorPage.xaml b/samples/CommunityToolkit.Maui.Sample/Pages/Behaviors/StatusBarBehaviorPage.xaml
index 9d0ccb88c4..2c08158c8b 100644
--- a/samples/CommunityToolkit.Maui.Sample/Pages/Behaviors/StatusBarBehaviorPage.xaml
+++ b/samples/CommunityToolkit.Maui.Sample/Pages/Behaviors/StatusBarBehaviorPage.xaml
@@ -86,7 +86,7 @@
+ /// Method to update the status bar size.
+ ///
+ public static void UpdateBarSize()
{
- var uiColor = color.ToPlatform();
-
if (OperatingSystem.IsIOSVersionAtLeast(13))
{
var statusBarTag = new IntPtr(38482);
@@ -23,12 +25,8 @@ static void PlatformSetColor(Color color)
continue;
}
- // ReSharper disable once NullCoalescingConditionIsAlwaysNotNullAccordingToAPIContract
- // window.ViewWithTag(tag) can return null
statusBar ??= new UIView(statusBarFrame.Value);
statusBar.Tag = statusBarTag;
- statusBar.BackgroundColor = uiColor;
- statusBar.TintColor = uiColor;
statusBar.Frame = UIApplication.SharedApplication.StatusBarFrame;
var statusBarSubViews = window.Subviews.Where(x => x.Tag == statusBarTag).ToList();
foreach (var statusBarSubView in statusBarSubViews)
@@ -38,41 +36,24 @@ static void PlatformSetColor(Color color)
window.AddSubview(statusBar);
- UpdateStatusBarAppearance(window);
+ TryUpdateStatusBarAppearance(window);
}
}
else
{
- if (UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) is UIView statusBar
- && statusBar.RespondsToSelector(new ObjCRuntime.Selector("setBackgroundColor:")))
+ if (UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) is UIView statusBar)
{
- statusBar.BackgroundColor = uiColor;
+ statusBar.Frame = UIApplication.SharedApplication.StatusBarFrame;
}
- UpdateStatusBarAppearance();
+ TryUpdateStatusBarAppearance();
}
}
-
- static void PlatformSetStyle(StatusBarStyle statusBarStyle)
+
+ static void PlatformSetColor(Color color)
{
- var uiStyle = statusBarStyle switch
- {
- StatusBarStyle.Default => UIStatusBarStyle.Default,
- StatusBarStyle.LightContent => UIStatusBarStyle.LightContent,
- StatusBarStyle.DarkContent => UIStatusBarStyle.DarkContent,
- _ => throw new NotSupportedException($"{nameof(StatusBarStyle)} {statusBarStyle} is not yet supported on iOS")
- };
-
- UIApplication.SharedApplication.SetStatusBarStyle(uiStyle, false);
-
- UpdateStatusBarAppearance();
- }
+ var uiColor = color.ToPlatform();
- ///
- /// Method to update the status bar size.
- ///
- public static void UpdateBarSize()
- {
if (OperatingSystem.IsIOSVersionAtLeast(13))
{
var statusBarTag = new IntPtr(38482);
@@ -85,8 +66,12 @@ public static void UpdateBarSize()
continue;
}
+ // ReSharper disable once NullCoalescingConditionIsAlwaysNotNullAccordingToAPIContract
+ // window.ViewWithTag(tag) can return null
statusBar ??= new UIView(statusBarFrame.Value);
statusBar.Tag = statusBarTag;
+ statusBar.BackgroundColor = uiColor;
+ statusBar.TintColor = uiColor;
statusBar.Frame = UIApplication.SharedApplication.StatusBarFrame;
var statusBarSubViews = window.Subviews.Where(x => x.Tag == statusBarTag).ToList();
foreach (var statusBarSubView in statusBarSubViews)
@@ -96,39 +81,65 @@ public static void UpdateBarSize()
window.AddSubview(statusBar);
- UpdateStatusBarAppearance(window);
+ TryUpdateStatusBarAppearance(window);
}
}
else
{
- if (UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) is UIView statusBar)
+ if (UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) is UIView statusBar
+ && statusBar.RespondsToSelector(new ObjCRuntime.Selector("setBackgroundColor:")))
{
- statusBar.Frame = UIApplication.SharedApplication.StatusBarFrame;
+ statusBar.BackgroundColor = uiColor;
}
- UpdateStatusBarAppearance();
+ TryUpdateStatusBarAppearance();
}
}
- static void UpdateStatusBarAppearance()
+ static void PlatformSetStyle(StatusBarStyle statusBarStyle)
+ {
+ var uiStyle = statusBarStyle switch
+ {
+ StatusBarStyle.Default => UIStatusBarStyle.Default,
+ StatusBarStyle.LightContent => UIStatusBarStyle.LightContent,
+ StatusBarStyle.DarkContent => UIStatusBarStyle.DarkContent,
+ _ => throw new NotSupportedException($"{nameof(StatusBarStyle)} {statusBarStyle} is not yet supported on iOS")
+ };
+
+ UIApplication.SharedApplication.SetStatusBarStyle(uiStyle, false);
+
+ TryUpdateStatusBarAppearance();
+ }
+
+ static bool TryUpdateStatusBarAppearance()
{
if (OperatingSystem.IsIOSVersionAtLeast(13))
{
+ var didUpdateAllStatusBars = true;
+
foreach (var window in UIApplication.SharedApplication.Windows)
{
- UpdateStatusBarAppearance(window);
+ didUpdateAllStatusBars &= TryUpdateStatusBarAppearance(window);
}
+
+ return didUpdateAllStatusBars;
}
else
{
var window = UIApplication.SharedApplication.KeyWindow;
- UpdateStatusBarAppearance(window);
+ return TryUpdateStatusBarAppearance(window);
}
}
- static void UpdateStatusBarAppearance(UIWindow? window)
+ static bool TryUpdateStatusBarAppearance(UIWindow? window)
{
- var vc = window?.RootViewController ?? WindowStateManager.Default.GetCurrentUIViewController() ?? throw new InvalidOperationException($"{nameof(window.RootViewController)} cannot be null");
+ var vc = window?.RootViewController ?? WindowStateManager.Default.GetCurrentUIViewController();
+
+ if (vc is null)
+ {
+ Trace.WriteLine("Unable to update Status Bar Appearance because Current UIViewController is null");
+ return false;
+ }
while (vc.PresentedViewController is not null)
{
@@ -136,5 +147,7 @@ static void UpdateStatusBarAppearance(UIWindow? window)
}
vc.SetNeedsStatusBarAppearanceUpdate();
+
+ return true;
}
}
\ No newline at end of file