iOS UIFont.ByName Exception(Value不能为null.参数名称:value)

iOS UIFont.ByName Exception(Value不能为null.参数名称:value),第1张

概述在自定义Xamarin Forms iOS渲染器中,我正在从文件加载字体,当我到达UIFont.FromName时,它会消除下面显示的异常. font var是一个有效的CGFont实例,fontsize是一个有效的nfloat.有任何想法吗? var font = CGFont.CreateFromProvider(fontDataProvider);Control.Font = UIFont 在自定义Xamarin Forms iOS渲染器中,我正在从文件加载字体,当我到达UIFont.Fromname时,它会消除下面显示的异常. Font var是一个有效的CGFont实例,Fontsize是一个有效的nfloat.有任何想法吗?

var Font = CGFont.CreateFromProvIDer(FontDataProvIDer);Control.Font = UIFont.Fromname(Font.Fullname,(nfloat)e.NewElement.FontSize);

堆栈跟踪:

System.ArgumentNullException: Value cannot be null.Parameter name: value  at UIKit.UILabel.set_Font (UIKit.UIFont value) [0x00011] in /Users/builder/data/lanes/1381/3afb4af5/source/maccore/src/build/ios/native/UIKit/UILabel.g.cs:337   at DecryptRenderFont.iOS.DecryptRenderControlRenderer.OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs`1[TElement] e) [0x00215]   at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x00118] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.iOS.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00000] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001b] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.VisualElementPackager.OnChildAdded (Xamarin.Forms.VisualElement vIEw) [0x00000] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.VisualElementPackager.Load () [0x00023] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000cc] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.iOS.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00000] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001b] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.VisualElementPackager.OnChildAdded (Xamarin.Forms.VisualElement vIEw) [0x00000] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.VisualElementPackager.Load () [0x00023] in <filename unkNown>:0   at Xamarin.Forms.Platform.iOS.PageRenderer.VIEwDIDLoad () [0x0007d] in <filename unkNown>:0   at (wrapper managed-to-native) ObjCRuntime.Messaging:IntPtr_objc_msgSendSuper (intptr,intptr)  at UIKit.UIVIEwController.get_VIEw () [0x00030] in /Users/builder/data/lanes/1381/3afb4af5/source/maccore/src/build/ios/native/UIKit/UIVIEwController.g.cs:2667
解决方法 1)我将假设你看到的异常堆栈没有显示实际的底层错误,因为它来自Xamarin.iOS生成的UILabel.g.cs文件(这是 https://github.com/xamarin/xamarin-macios中自动生成的包装器)而且我个人有一些问题跟踪某些低级 *** 作系统异常/抛出因此显示的异常有点(很多?)误导.

2)我再次假设,因为你说你是“从文件中加载字体”,这些字体没有注册.假设您通过CGFont.CreateFromProvIDer从应用程序包中的文件(或动态下载)加载这些字体,并且由于它们不存在于UIAppFonts键下的info.pList中,因此它们不会自动注册到iOS.你需要自己做这个步骤:

NSError error;if (!CTFontManager.RegistergraphicsFont(customFont,out error)){   // error occurred,checkout the contents of the NSError var}

在使用iOS字体管理器(CTFontManager)注册CGFont之后,你可以在UIKit中实际使用它们,否则在iOS代码内部有一个例外…需要写一些ObjC / Swift来检查它在Xcode中看看是什么抛出的实际错误是……

您的字体是否已注册:

在异常之前但在CreateFromProvIDer之后的某个地方,您可以执行以下 *** 作:

foreach (var familynames in UIFont.Familynames.OrderBy(c => c).ToList()){    D.Writeline(" * " + familynames);    foreach (var familyname in UIFont.FontnamesForFamilyname(familynames).OrderBy(c => c).ToList())    {        D.Writeline(" *-- " + familyname);    }}

注意:D只是使用D = System.Diagnostics.DeBUG;

我敢打赌,你的字体不在列表中,但在调用CTFontManager.RegistergraphicsFont后,它将在该列表中并且有效供UIKit使用.

更新:

有趣的是,使用基于Swift的应用程序而不注册字体不会导致应用程序崩溃.当然没有显示字体,但是通过UIFont(名称:“XXXXX”,大小:35)引用它只是一个无声的失败.

因此,我建议您在使用自定义字体时保护一些防御性的{{{{{{{

@H_502_56@ 总结

以上是内存溢出为你收集整理的iOS UIFont.ByName Exception(Value不能为null.参数名称:value)全部内容,希望文章能够帮你解决iOS UIFont.ByName Exception(Value不能为null.参数名称:value)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1209412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存