为什么 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,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);