Je suis nouveau à Xamarin.Forms.

J'ai besoin de mesurer la taille d'une étiquette en fonction de son contenu. Parce que c'est spécifique à la plate-forme. J'ai créé une interface dans la bibliothèque partagée et deux implémentations dans les dossiers IOS et Android. Voici la déclaration de l'interface:

public interface ITextMeasurement
{
    double MeasureTextHeight(string text, double width, double fontSize, string fontName = null);
        
}

Dans la plate-forme spécifique, par exemple iOS, j'ai la classe de mise en œuvre comme celle-ci:

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;
        }
    }

Toutefois, lorsque j'ai essayé d'instancier la classe dans la bibliothèque partagée, le nom de la classe a été signalé comme "Type ou nom d'espace de noms" TextMeasageImpl "Impossible de trouver". Étant donné que les implémentations Android et iOS avaient la même signature, je n'ai pas vérifié la plate-forme. Même si je fais le chèque, j'ai toujours eu l'erreur.

 TextMeasurementImpl labelMeas = new TextMeasurementImpl().MeasureTextHeight();

Je suivais ce lien pour créer la plate-forme de mise en œuvre spécifique: https://gist.github.com/alexrainman/82B00160AB32BEF9E69DEE6D460F44FA

0
Wei Wen 3 mai 2021 à 23:36

1 réponse

Meilleure réponse

Vous l'utilisez dans le mauvais sens, vous devez faire comme ça:

Dans votre projet de formulaire:

double  textHeight = DependencyService.Get<ITextMeasurement>().MeasureTextHeight("your text", width,fontsize,fontname);
0
Leo Zhu - MSFT 4 mai 2021 à 02:25