Skip to content

Commit

Permalink
Compatible with iOS 10 ibireme#459
Browse files Browse the repository at this point in the history
  • Loading branch information
ibireme committed Sep 13, 2016
1 parent 07193fb commit 01da280
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions YYText/Component/YYTextLayout.m
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,8 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri
NSUInteger *lineRowsIndex = NULL;
NSRange visibleRange;
NSUInteger maximumNumberOfRows = 0;
BOOL constraintSizeIsExtended = NO;
CGRect constraintRectBeforeExtended = {0};

text = text.mutableCopy;
container = container.copy;
Expand All @@ -399,12 +401,18 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri
// CoreText bug when draw joined emoji since iOS 8.3.
// See -[NSMutableAttributedString setClearColorToJoinedEmoji] for more information.
static BOOL needFixJoinedEmojiBug = NO;
// It may use larger constraint size when create CTFrame with
// CTFramesetterCreateFrame in iOS 10.
static BOOL needFixLayoutSizeBug = NO;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
double systemVersionDouble = [UIDevice currentDevice].systemVersion.doubleValue;
if (8.3 <= systemVersionDouble && systemVersionDouble < 9) {
needFixJoinedEmojiBug = YES;
}
if (systemVersionDouble >= 10) {
needFixLayoutSizeBug = YES;
}
});
if (needFixJoinedEmojiBug) {
[((NSMutableAttributedString *)text) yy_setClearColorToJoinedEmoji];
Expand All @@ -420,6 +428,16 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri
if (container.path == nil && container.exclusionPaths.count == 0) {
if (container.size.width <= 0 || container.size.height <= 0) goto fail;
CGRect rect = (CGRect) {CGPointZero, container.size };
if (needFixLayoutSizeBug) {
constraintSizeIsExtended = YES;
constraintRectBeforeExtended = UIEdgeInsetsInsetRect(rect, container.insets);
constraintRectBeforeExtended = CGRectStandardize(constraintRectBeforeExtended);
if (container.isVerticalForm) {
rect.size.width = YYTextContainerMaxSize.width;
} else {
rect.size.height = YYTextContainerMaxSize.height;
}
}
rect = UIEdgeInsetsInsetRect(rect, container.insets);
rect = CGRectStandardize(rect);
cgPathBox = rect;
Expand Down Expand Up @@ -511,6 +529,19 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri

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;
}
}

BOOL newRow = YES;
if (rowMaySeparated && position.x != lastPosition.x) {
if (isVerticalForm) {
Expand Down

0 comments on commit 01da280

Please sign in to comment.