Open yixianxueqi opened 3 years ago
iOS10.3.1上复现的; 为了解决富文本中含有的emoji导致行高不一致,我使用了
let modifier = YYTextLinePositionSimpleModifier() modifier.fixedLineHeight = ceil(FS2.lineHeight) let container = YYTextContainer() container.size = CGSize(width: attributedTextMaxWidth, height: CGFloat.greatestFiniteMagnitude) container.linePositionModifier = modifier container.insets = UIEdgeInsets.zero if let attrText = state.renderedText { let layout: YYTextLayout? = YYTextLayout(container: container, text: attrText) state.renderedTextLayout = layout }
但是在触发highlight时,在_showHighlightAnimated中重新触发布局
[YYTextLayout layoutWithContainer:_innerContainer text:hiText];
中发现,此处constraintRectBeforeExtended是文本展示实际的size(经过行高调整后),但是获取的line的bounds是未调整前的(比调整后的偏大),导致高度超出被break了使最后一行被丢弃了, UI上反应的就是文本行数发生了变化;
YYTextLine *line = [YYTextLine lineWithCTLine:ctLine position:position vertical:isVerticalForm]; CGRect rect = line.bounds; if (constraintSizeIsExtended) { if (isVerticalForm) { if (rect.origin.x + rect.size.width > constraintRectBeforeExtended.origin.x + constraintRectBeforeExtended.size.width) break; } else { if (rect.origin.y + rect.size.height > constraintRectBeforeExtended.origin.y + constraintRectBeforeExtended.size.height) break; } }
iOS10.3.1上复现的; 为了解决富文本中含有的emoji导致行高不一致,我使用了
但是在触发highlight时,在_showHighlightAnimated中重新触发布局
中发现,此处constraintRectBeforeExtended是文本展示实际的size(经过行高调整后),但是获取的line的bounds是未调整前的(比调整后的偏大),导致高度超出被break了使最后一行被丢弃了, UI上反应的就是文本行数发生了变化;