diff --git a/AsyncDisplayKit/ASTextNode.mm b/AsyncDisplayKit/ASTextNode.mm index 317ce2a2fd..7910f6df82 100644 --- a/AsyncDisplayKit/ASTextNode.mm +++ b/AsyncDisplayKit/ASTextNode.mm @@ -1163,7 +1163,7 @@ static NSAttributedString *DefaultTruncationAttributedString() ASDN::MutexLocker l(__instanceLock__); ASTextKitRenderer *renderer = [self _renderer]; - return renderer.firstVisibleRange.length < _attributedText.length; + return renderer.isTruncated; } - (void)setPointSizeScaleFactors:(NSArray *)pointSizeScaleFactors diff --git a/AsyncDisplayKit/TextKit/ASTextKitRenderer.h b/AsyncDisplayKit/TextKit/ASTextKitRenderer.h index d34ce0e1c5..c7cbed14c4 100755 --- a/AsyncDisplayKit/TextKit/ASTextKitRenderer.h +++ b/AsyncDisplayKit/TextKit/ASTextKitRenderer.h @@ -85,6 +85,11 @@ */ - (NSUInteger)lineCount; +/** + Whether or not the text is truncated. + */ +- (BOOL)isTruncated; + @end @interface ASTextKitRenderer (ASTextKitRendererConvenience) diff --git a/AsyncDisplayKit/TextKit/ASTextKitRenderer.mm b/AsyncDisplayKit/TextKit/ASTextKitRenderer.mm index 1967b98264..dee17dbf7a 100755 --- a/AsyncDisplayKit/TextKit/ASTextKitRenderer.mm +++ b/AsyncDisplayKit/TextKit/ASTextKitRenderer.mm @@ -261,6 +261,18 @@ static NSCharacterSet *_defaultAvoidTruncationCharacterSet() return lineCount; } +- (BOOL)isTruncated +{ + if (self.canUseFastPath) { + CGRect boundedRect = [_attributes.attributedString boundingRectWithSize:CGSizeMake(_constrainedSize.width, CGFLOAT_MAX) + options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine + context:nil]; + return boundedRect.size.height > _constrainedSize.height; + } else { + return self.firstVisibleRange.length < _attributes.attributedString.length; + } +} + - (std::vector)visibleRanges { return _truncater.visibleRanges;