ibireme / YYText

Powerful text framework for iOS to display and edit rich text.
MIT License
8.86k stars 1.7k forks source link

你好,使用YYTextLayout算高度出问题了 #400

Closed hackjie closed 5 years ago

hackjie commented 8 years ago

这是我算高的代码:

这是我Label的设置:

这是我算高的部分: NSMutableAttributedString _improveAttributeText = [NSMutableAttributedString makeAttributeStringWithText:item.resultEval font:[UIFont systemFontOfSize:fontSize] color:[HBTThemeManager appCustomGrayFontColor]]; improveAttributeText.yy_lineSpacing = lineSpacing; improveAttributeText.yy_maximumLineHeight = fontSize; improveAttributeText.yy_minimumLineHeight = fontSize; CGFloat improveHeight = [NSMutableAttributedString calculateAttributeStringHeightWithAttributeString:stateAttributeText fixWidth:(SCREEN_WIDTH * 0.75 - 2_kViewLeadingAndTrailingOffset)]; 0671f109-4332-4636-9502-9baf518bf58c

现在计算的文字高度总是缺少一段,给定的宽度限制应该没问题

ibireme commented 8 years ago

看着这些没问题。那后面是怎么设置 label 的文字、调整 label 的大小的呢?

hackjie commented 8 years ago

奇怪的是我如果直接返回YYTextLayout就可以,但是直接返回height就不丢失

ibireme commented 8 years ago

之后是怎么设置 label 的文字、调整 label 的大小的呢?那段代码可能能看出原因。

hackjie commented 8 years ago

我上面写了的: NSMutableAttributedString improveAttributeText = [NSMutableAttributedString makeAttributeStringWithText:item.resultEval font:[UIFont systemFontOfSize:fontSize] color:[HBTThemeManager appCustomGrayFontColor]]; improveAttributeText.yy_lineSpacing = lineSpacing; improveAttributeText.yy_maximumLineHeight = fontSize; improveAttributeText.yy_minimumLineHeight = fontSize; CGFloat improveHeight = [NSMutableAttributedString calculateAttributeStringHeightWithAttributeString:stateAttributeText fixWidth:(SCREEN_WIDTH * 0.75 - 2kViewLeadingAndTrailingOffset)];

ibireme commented 8 years ago

我的意思是,后面 label.frame、text、attributedText、textLayout 属性是怎么设置的,设置的顺序是什么样的。

我觉得如果直接设置 texyLayout 应该是没问题的。

hackjie commented 8 years ago

嗯嗯 直接设置textLayout可以解决问题

ashen-23 commented 8 years ago

灰常感谢....用系统方式算了半天行高,一直都算的不正确,后来发现原来是YYLabel显示的带行间距的attributeString和系统显示的间距不太一样,用YYTextLayout计算结果正常.

hackjie commented 8 years ago

@515783034 haha

ashen-23 commented 8 years ago

@hackjie 哥们,我直接返回高度,算的也是有缺失,你返回layout的话是怎么获取文本实际高度的?因为我是代码计算cell的行高的,需要知道这个高度

ashen-23 commented 8 years ago

如果在PC端输入文字包含了\r\n,那么计算时的高度就会少1行.而且在某些情况下,单独的句号会另起一行,导致计算行高错误. @ibireme

ibireme commented 8 years ago

@515783034 你是用 YYTextView 还是 YYLabel 显示的?另外,lineBreakMode 设置的是什么?

leirenbaobao commented 5 years ago

@ibireme YYTextLayout 在使用layoutWithContainerSize方法计算size的时候 可以设置行数吗。试了下 设置好像没有效果。

leirenbaobao commented 5 years ago

自问自答: YYTextContainer container = [YYTextContainer containerWithSize:size]; container.maximumNumberOfRows = self.numberOfLines; YYTextLayout layout = [YYTextLayout layoutWithContainer:container text:totalAttributedString];