我正在尝试获取一个属性字符串的rect,但是boundingRectWithSize调用没有考虑到我传入的大小,并且返回一个单行高度的rect,而不是一个很大的高度(它是一个很长的字符串)。我在下面的代码中尝试了传入一个非常大的高度值和0,但返回的rect总是相同的。
CGRect paragraphRect = [attributedText boundingRectWithSize:CGSizeMake(300,0.0)
options:NSStringDrawingUsesDeviceMetrics
context:nil];这是不是坏了,或者我需要做一些其他的事情来让它返回一个包装文本的rect?
发布于 2013-03-14 09:48:30
看起来你没有提供正确的选项。对于包装标签,至少要提供:
CGRect paragraphRect =
[attributedText boundingRectWithSize:CGSizeMake(300.f, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
context:nil];注意:如果原始文本宽度小于300。f将不会有换行,因此请确保装订大小正确,否则仍然会得到错误的结果。
发布于 2014-12-04 16:25:37
由于某些原因,boundingRectWithSize总是返回错误的大小。我想出了一个解决方案。有一个用于UItextView -sizeThatFits的方法,它返回文本集的适当大小。因此,不使用boundingRectWithSize,而是创建一个具有随机帧的UITextView,并使用相应的宽度和CGFLOAT_MAX高度调用其sizeThatFits。它返回具有适当高度的大小。
UITextView *view=[[UITextView alloc] initWithFrame:CGRectMake(0, 0, width, 10)];
view.text=text;
CGSize size=[view sizeThatFits:CGSizeMake(width, CGFLOAT_MAX)];
height=size.height; 如果你在while循环中计算大小,不要忘了在自动释放池中添加,因为将有n个UITextView创建,如果我们不使用自动释放池,应用程序的运行时内存将增加。
发布于 2013-06-15 05:09:37
Ed McManus无疑提供了一个使其发挥作用的关键。我发现了一个不起作用的案例
UIFont *font = ...
UIColor *color = ...
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
font, NSFontAttributeName,
color, NSForegroundColorAttributeName,
nil];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString: someString attributes:attributesDictionary];
[string appendAttributedString: [[NSAttributedString alloc] initWithString: anotherString];
CGRect rect = [string boundingRectWithSize:constraint options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil];矩形将不具有正确的高度。请注意,anotherString (附加到字符串)是在没有属性字典的情况下初始化的。这是anotherString的合法初始值设定项,但在这种情况下,boundingRectWithSize:不会给出准确的大小。
https://stackoverflow.com/questions/13621084
复制相似问题