Это потому, что вы использовали Frame для добавления пользовательской строки состояния. Когда он сталкивается с пейзажем, его ширина остается значением портрета. Попробуйте изменить его на autolayout, например:
if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
{
UIView statusBar = new UIView();
statusBar.TranslatesAutoresizingMaskIntoConstraints = false;
statusBar.BackgroundColor = UIColor.White;
UIApplication.SharedApplication.KeyWindow.AddSubview(statusBar);
statusBar.LeadingAnchor.ConstraintEqualTo(UIApplication.SharedApplication.KeyWindow.LeadingAnchor).Active = true;
statusBar.TopAnchor.ConstraintEqualTo(UIApplication.SharedApplication.KeyWindow.TopAnchor).Active = true;
statusBar.TrailingAnchor.ConstraintEqualTo(UIApplication.SharedApplication.KeyWindow.TrailingAnchor).Active = true;
statusBar.HeightAnchor.ConstraintEqualTo(UIApplication.SharedApplication.KeyWindow.WindowScene.StatusBarManager.StatusBarFrame.Height).Active = true;
}
Обновить
Если вы хотите изменить цвет обратно на исходное значение, попробуйте код здесь:
public override void TraitCollectionDidChange(UITraitCollection previousTraitCollection)
{
base.TraitCollectionDidChange(previousTraitCollection);
if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
{
var window = UIApplication.SharedApplication.KeyWindow;
UIView statusBar;
if (window.ViewWithTag(4) != null)
{
statusBar = window.ViewWithTag(4);
}
else
{
statusBar = new UIView();
statusBar.TranslatesAutoresizingMaskIntoConstraints = false;
statusBar.Tag = 4;
UIApplication.SharedApplication.KeyWindow.AddSubview(statusBar);
statusBar.LeadingAnchor.ConstraintEqualTo(UIApplication.SharedApplication.KeyWindow.LeadingAnchor).Active = true;
statusBar.TopAnchor.ConstraintEqualTo(UIApplication.SharedApplication.KeyWindow.TopAnchor).Active = true;
statusBar.TrailingAnchor.ConstraintEqualTo(UIApplication.SharedApplication.KeyWindow.TrailingAnchor).Active = true;
statusBar.HeightAnchor.ConstraintEqualTo(UIApplication.SharedApplication.KeyWindow.WindowScene.StatusBarManager.StatusBarFrame.Height).Active = true;
}
if (previousTraitCollection.UserInterfaceStyle == UIUserInterfaceStyle.Light)
{
statusBar.BackgroundColor = UIColor.White;
}
else
{
statusBar.BackgroundColor = UIColor.Clear;
}
}
}
Если это не то, что вы хотите, не могли бы вы добавить больше описаний вашей проблемы?
Кстати, если вы хотите добавить какой-то переход, попробуйте это:
UIView.Animate(0.3, () =>
{
statusBar.BackgroundColor = UIColor.White;
});