我如何得到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显示文本的任意块的高度?

我如何得到StringSize返回一个有用的高度

这不是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 }

StringSizeforWidth重载调用到本机sizeWithFont:forWidth:lineBreakMode: NSString方法。由于某些原因,当您使用此重载时,它将截断字符串以进行测量。

此方法返回字符串的宽度和高度,该宽度被约束为指定的宽度。虽然它会计算断行的位置,但该方法实际上不会将文本换行到其他行。如果字符串的大小超过给定的宽度,此方法将使用指定的换行模式截断文本(仅用于布局目的),直到它符合最大宽度;然后返回截断后的字符串的大小。

关于UITextView padding的注意事项

作为旁注,使用UITextView和返回的StringSize将导致需要滚动查看的文本(UITextView继承自UIScrollView),因为它包含一些强制内容填充。您还需要调整内容偏移量以获得您期望的效果。

someUITextView.ContentInset = new UIEdgeInsets(-8, -8, -8, -8);