xamarin.forms - 为什么 xamarin.forms 中的共享库无法识别 Android/iOS 文件夹中的实现类
问题描述
我是 Xamarin.forms 的新手。
我需要根据标签的内容来测量标签的大小。因为这是特定于平台的。我在共享库中创建了一个接口,在 iOS 和 Android 文件夹中创建了两个实现。这是接口的声明:
public interface ITextMeasurement
{
double MeasureTextHeight(string text, double width, double fontSize, string fontName = null);
}
在特定平台,例如iOS,我有这样的实现类:
class TextMeasurementImpl : ITextMeasurement
{
public double MeasureTextHeight(string text, double width, double fontSize, string fontName = null)
{
var nsText = new NSString(text);
var boundSize = new SizeF((float)width, float.MaxValue);
....
var sizeF = nsText.GetBoundingRect(boundSize, options, attributes, null).Size;
return (double)sizeF.Height;
}
}
但是,当我尝试在共享库中实例化类时,类名被标记为“找不到类型或命名空间名称'TextMeasurementImpl'”。由于 Android 和 iOS 实现具有相同的签名,因此我没有检查平台。即使我进行检查,我仍然得到错误。
TextMeasurementImpl labelMeas = new TextMeasurementImpl().MeasureTextHeight();
我按照这个链接来创建平台特定的实现: https ://gist.github.com/alexrainman/82b00160ab32bef9e69dee6d460f44fa
解决方案
您以错误的方式使用它,您需要这样做:
在您的表单项目中:
double textHeight = DependencyService.Get<ITextMeasurement>().MeasureTextHeight("your text", width,fontsize,fontname);
推荐阅读
- sql - db2 sql 查询 - char 和 decimal 之间的连接
- python - 有没有办法制作一个可执行文件来运行一个执行不同 python 文件的 python 文件?
- sql-server - 在 SQL Server 中将字节转换为 MB
- mysql - 可以增加 Navigator 字体大小吗?
- c - 如何在不使用 C 中的括号的情况下修改字符串文字的内容?
- ios - 如何重新映射 iPhone 上的按键?
- java - 在 RestApi Spring 中放置超过 5 个 @Pathvariable 的最佳方法是什么?
- c# - 如何阻止相机渲染到 RenderTexture?
- node.js - 多种账户类型 MERN Stack
- html - 引导导航栏的自定义“活动”指示器