Xamarin iOS UINavigationBar 奇怪的覆盖
Posted
技术标签:
【中文标题】Xamarin iOS UINavigationBar 奇怪的覆盖【英文标题】:Xamarin iOS UINavigationBar weird overlay 【发布时间】:2020-08-02 19:42:52 【问题描述】:我在 Xamarin 4.5 和 ios 13 中工作。我正在使用模拟器运行代码。这是它的外观。
我添加了以下代码来应用红色,但它没有隐藏这个白色/灰色叠加层。
UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;
UINavigationBar.Appearance.BarTintColor = UIColor.Red;
UINavigationBar.Appearance.TintColor = UIColor.Red;
UINavigationBar.Appearance.TitleTextAttributes = new UIStringAttributes
ForegroundColor = UIColor.Red
;
UINavigationBar.Appearance.BackgroundColor = UIColor.FromRGBA(255, 0, 0, 255);
最后一行添加了红色。
【问题讨论】:
@LucasZhang-MSFT 请停止重复评论,一旦我测试它,我会接受你的回答 好的,不管它是否有效,请告诉我结果:) @LucasZhang-MSFT 我将 Xamarin 表单从 4.5 更新到 4.6.x 并解决了这个问题,在更新之前我注意到它只发生在 iPhone 10、11 中。我认为它与额外的填充物或安全区域 【参考方案1】:这将是一个预期的效果,因为 UINavigationBar 在 iOS 11.0 之后有一个默认的CALayer
。作为一种解决方法,我们可以使用自定义渲染器创建自定义 NavigationBar
在您的 iOS 项目中
using Foundation;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using xxx;
using xxx.iOS;
using CoreGraphics;
using ObjCRuntime;
[assembly:ExportRenderer(typeof(ContentPage),typeof(MyPageRenderer))]
namespace xxx.iOS
public class MyPageRenderer:PageRenderer
public override void ViewWillAppear(bool animated)
base.ViewWillAppear(animated);
NavigationController.NavigationBar.Hidden = true;
double height = IsiphoneX();
UIView backView = new UIView()
BackgroundColor = UIColor.Red,
Frame = new CGRect(0, 20, UIScreen.MainScreen.Bounds.Width, height),
;
// set
UIButton backBtn = new UIButton()
Frame = new CGRect(20, height - 44, 40, 44),
Font = UIFont.SystemFontOfSize(18),
;
backBtn.SetTitle("<",UIControlState.Normal);
backBtn.SetTitleColor(UIColor.White,UIControlState.Normal);
backBtn.AddTarget(this, new Selector("GoBack"), UIControlEvent.TouchUpInside);
UILabel titleLabel = new UILabel()
Frame = new CGRect(UIScreen.MainScreen.Bounds.Width / 2 - 75, 0, 150, height),
Font = UIFont.SystemFontOfSize(20),
Text = "xxx",
TextColor = UIColor.White,
Lines = 0,
;
UILabel line = new UILabel()
Frame = new CGRect(0, height, UIScreen.MainScreen.Bounds.Width, 0.5),
BackgroundColor = UIColor.Black,
;
if (NavigationController.ViewControllers.Length > 1)
backView.AddSubview(backBtn);
backView.AddSubview(titleLabel);
backView.AddSubview(line);
View.AddSubview(backView);
double IsiphoneX()
double height = 44;
if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
if (UIApplication.SharedApplication.Delegate.GetWindow().SafeAreaInsets.Bottom > 0.0)
height = 64;
return height;
[Export("GoBack")]
void GoBack()
NavigationController.PopViewController(true);
public override void ViewWillDisappear(bool animated)
base.ViewWillDisappear(animated);
NavigationController.NavigationBar.Hidden = false;
您可以根据需要设置 title , backButton 和 navigationBar 的属性(例如 text , color ,BackgroundColor ,font e.g.)
【讨论】:
以上是关于Xamarin iOS UINavigationBar 奇怪的覆盖的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机
Xamarin SQLite教程Xamarin.iOS项目添加引用
Xamarin.Forms 是 Xamarin.Android、Xamarin.IoS 和 Xamarin.Win 的简单总和吗?