我正在尝试使用CoreGraphics绘制一些文本。遗憾的是,没有方法可以返回文本的宽度。我尝试使用此方法获取宽度:
private float GetTextWidth(CGContext context, string text)
{
float startWidth,
endWidth,
textWidth;
startWidth = context.TextPosition.X;
context.SetTextDrawingMode(CGTextDrawingMode.Invisible);
context.ShowText(text);
endWidth = context.TextPosition.X;
textWidth = endWidth - startWidth;
return textWidth;
}
但如果我想要多行文字,我还需要考虑字体。 所以我考虑使用UILable并从中获取值,执行以下操作:
RectangleF lableRect = new RectangleF((float)rect.X, (float)rect.Y, (float)rect.Width, (float)rect.Height);
UILabel lable = new UILabel(lableRect){
Font = UIFont.FromName(font.Family.ToString(), (float)font.Size),
Text = text,
};
SizeF uiSize = lable.StringSize(lable.Text, lable.Font);
虽然高度似乎没问题,但宽度不正确。知道为什么吗?
答案 0 :(得分:5)
试试NSString
。它有各种重载,如:
SizeF size = new NSString (s).StringSize (font, UIScreen.MainScreen.Bounds.Width, UILineBreakMode.TailTruncation);
如果您希望UILabel
适合所包含的字符串,您也可以只调用UILabel.SizeToFit()
。或者,如果您想知道UILabel中字符串的大小,请使用UILabel.StringSize()