我如何得到StringSize返回一个有用的高度
本文关键字:一个 有用 高度 何得 StringSize 返回 | 更新日期: 2023-09-27 17:53:16
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
显示文本的任意块的高度?
这不是MonoTouch特有的,但你必须搜索原生NSString.sizeWithFont
方法来找到答案,所以这应该有助于其他MonoTouch开发人员在未来。
由于某种原因,您将需要对StringSize
进行不同的重载,该重载接受完整的SizeF
参数而不是宽度值。在这种情况下,您只需"破解"即可。在一个非常大的高度,以获得wrapped-text的大小。
SizeF sizeToDisplay = someUIView.StringSize(someString, someFont, new SizeF(Bounds.Width, float.MaxValue), UILineBreakMode.WordWrap);
// For the larger string: sizeToDisplay = { Width: 307, Height = 1600 }
StringSize
的forWidth
重载调用到本机sizeWithFont:forWidth:lineBreakMode:
NSString
方法。由于某些原因,当您使用此重载时,它将截断字符串以进行测量。
关于UITextView padding的注意事项此方法返回字符串的宽度和高度,该宽度被约束为指定的宽度。虽然它会计算断行的位置,但该方法实际上不会将文本换行到其他行。如果字符串的大小超过给定的宽度,此方法将使用指定的换行模式截断文本(仅用于布局目的),直到它符合最大宽度;然后返回截断后的字符串的大小。
作为旁注,使用UITextView
和返回的StringSize
将导致需要滚动查看的文本(UITextView
继承自UIScrollView
),因为它包含一些强制内容填充。您还需要调整内容偏移量以获得您期望的效果。
someUITextView.ContentInset = new UIEdgeInsets(-8, -8, -8, -8);