首页 > 解决方案 > 为什么 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

标签: xamarin.forms

解决方案


您以错误的方式使用它,您需要这样做:

在您的表单项目中:

double  textHeight = DependencyService.Get<ITextMeasurement>().MeasureTextHeight("your text", width,fontsize,fontname);

推荐阅读