8

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 }

我应该使用其他方法来查找在 a 中显示任意文本块所需的高度UITextView吗?

4

1 回答 1

9

不是 MonoTouch 特有的,但您必须搜索本机NSString.sizeWithFont方法才能找到答案,因此这应该有助于将来的其他 MonoTouch 开发人员。

出于某种原因,您将需要为 打一个不同的重载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重载。出于某种原因,当您使用此重载时,它会截断您的字符串以进行测量。StringSizesizeWithFont:forWidth:lineBreakMode: NSString

此方法返回限制为指定宽度的字符串的宽度和高度。尽管它会计算出现换行符的位置,但此方法实际上并未将文本换行到其他行。如果字符串的大小超过给定的宽度,此方法会使用指定的换行模式截断文本(仅用于布局目的),直到它符合最大宽度;然后它返回生成的截断字符串的大小。

关于 UITextView 填充的注意事项

附带说明一下,使用UITextView带有返回值的 aStringSize将导致需要滚动才能看到的文本(UITextView继承自UIScrollView),因为它包含一些强制内容填充。您还需要调整内容偏移量以获得您所期望的。

someUITextView.ContentInset = new UIEdgeInsets(-8, -8, -8, -8);
于 2013-01-14T19:21:42.313 回答