我在一个没有导航栏(NavigationPage.SetHasNavigationBar(this, false);
)的NavigationPage中有一个带有WebView的ContentPage。
问题:iOS上的状态栏始终是透明的,并且可以通过它看到内容。我想避免这种情况,我想要一个带有白色文本的不透明/纯黑色状态栏。
我考虑过在状态栏下方仅设置一个彩色矩形,高度为20磅,但是如何确保它具有适用于iPhone X型手机的正确尺寸(44磅)呢? (iPhone XS Max,iPhone XR)。
NavigationPage.BarBackgroundColor
和BarTextColor
在隐藏导航栏时似乎没有什么不同。UIStatusBarStyleBlackOpaque
已过时。UIStatusBarStyle
与
UIViewControllerBasedStatusBarAppearance == false
可以更改
文字的颜色,而不是背景的颜色:背景始终
透明的。答案 0 :(得分:0)
在Xcode中,我无需使用代码即可实现此目的。首先,请确保您正在使用导航控制器。然后,在该控制器中单击顶部导航栏,然后将“样式”更改为“黑色”,将“栏色调”更改为“黑色”,然后将“色调”(靠近底部)更改为“白色”。然后它将自动按预期填充内容。
答案 1 :(得分:0)
如果只想使此页面不在Xamarin.Forms中显示导航栏,则
添加此页面,而不是导航页面的根。
我建议当您推送到此WebView页面时,不要使用导航页面,只需这样做。
Navigation.PushModalAsync(new NextPage());
不使用Navigation.PushAsync(new NextPage());
更多信息:
如果Xamarin.Forms的方法不起作用,则可以尝试使用本机ios方法来实现。
使用UIStatusBarStyle
设置UIBarStyleBlack
使用navigationBar.translucent
设置NO
半透明: 一个布尔值,指示导航栏是否为半透明(是)(是)(否)。
答案 2 :(得分:0)
在状态栏下方创建彩色矩形是正确的。
在页面的自定义页面渲染器(这里称为MyPage
)中,创建一个视图/子视图(UIView
),该视图/子视图的黑色背景覆盖状态栏(即位于其下方,提供的背景)。据我了解,自iOS 7起,状态栏从没有背景,并且始终是半透明的。
using MyApp;
using MyApp.iOS;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly:ExportRenderer (typeof(MyPage), typeof(MyPageRenderer))]
namespace MyApp.iOS
{
public class MyPageRenderer : PageRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{
return;
}
UIView statusBarCoverView = new UIView(UIApplication.SharedApplication.StatusBarFrame);
statusBarCoverView.BackgroundColor = UIColor.Black;
View.AddSubview(statusBarCoverView);
}
}
}
即使在设置了BarBackgroundColor
和BarTextColor
的情况下,即使先前的背景是明亮的,Xamarin.Forms NavigationPage也会坚持将状态栏文本设置为黑色,即使先前的背景为黑色。
到目前为止,我发现唯一更改此方法的方法是将UIViewControllerBasedStatusBarAppearance
中的false
设置为Info.plist
,这将导致状态栏文本在整体上始终为白色应用:
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
不理想,但是我还没有发现如何设置它。 UIApplication.SharedApplication.StatusBarStyle
,PreferredStatusBarStyle
或SetNeedsStatusBarAppearanceUpdate()
似乎无效。我怀疑这是因为页面是NavigationPage控制器的子控制器。