MonoTouch通过sizeWithFont
使UIView
方法可用,但无论我传递给它的字符串有多长,它似乎都会返回字体LineHeight
。
string someString = "test string";
UIFont someFont = UIFont.SystemFontOfSize(13f);
SizeF sizeToDisplay = someUIView.StringSize(someString, someFont, Bounds.Width, UILineBreakMode.WordWrap);
// sizeToDisplay = { Width: 58, Height = 16 }
someString = string.Join(" ", Enumerable.Repeat(someString, 500));
sizeToDisplay = someUIView.StringSize(someString, someFont, Bounds.Width, UILineBreakMode.WordWrap);
// sizeToDisplay = { Width: 304, Height = 16 }
我是否应该使用其他方法来查找在UITextView
中显示任意文本块所需的高度?
答案 0 :(得分:9)
这是isn't specific to MonoTouch,但您必须搜索本地NSString.sizeWithFont
方法才能找到答案,因此这将有助于其他MonoTouch开发者。
出于某种原因,您需要点击different overload for StringSize
,一个采用完整SizeF
参数而不是宽度值的参数。在这种情况下,你只需要在非常大的高度“破解”以获得包装文本大小。
SizeF sizeToDisplay = someUIView.StringSize(someString, someFont, new SizeF(Bounds.Width, float.MaxValue), UILineBreakMode.WordWrap);
// For the larger string: sizeToDisplay = { Width: 307, Height = 1600 }
forWidth
的{{1}}次重载调用the native sizeWithFont:forWidth:lineBreakMode:
NSString
method。出于某种原因,当您使用此重载时,它会截断您的字符串以进行测量。
此方法返回约束到指定宽度的字符串的宽度和高度。虽然它计算会发生换行的位置,但此方法实际上并不会将文本换行到其他行。如果字符串的大小超过给定的宽度,则此方法使用指定的换行符模式截断文本(仅用于布局),直到它符合最大宽度;然后它返回结果截断字符串的大小。
作为旁注,使用带有返回的StringSize
的{{1}}会产生需要滚动查看的文本(UITextView
继承自StringSize
),因为它包含一些强制内容填充。您还需要tweak the content offsets才能获得您的期望。
UITextView