2012-06-28 2 views
1

Я пытаюсь нарисовать текст с помощью 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); 

Хотя высота, кажется, хорошо, ширина не является правильным. Любая идея почему?

ответ

5

Попробуйте NSString. Она имеет различные перегрузки, как:

SizeF size = new NSString (s).StringSize (font, UIScreen.MainScreen.Bounds.Width, UILineBreakMode.TailTruncation); 

Если вы хотите UILabel, чтобы соответствовать, содержащейся строки вы также можете просто позвонить UILabel.SizeToFit(). Или, если вы хотите узнать размер строки в UILabel, используйте UILabel.StringSize()

+0

после выполнения некоторых тестов GetTextWidth возвращает ту же ширину, что и label.StringSize и nsstring.stingSize, поэтому я полагаю, что все работает, спасибо. – alecnash

+0

Просто маленький вопрос, есть ли способ найти длину усеченной строки? – alecnash

+0

То, что я не знаю с головы. Сожалею. – Krumelur

Смежные вопросы