Skip to content

Commit 01da280

Browse files
committed
Compatible with iOS 10 #459
1 parent 07193fb commit 01da280

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

YYText/Component/YYTextLayout.m

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,8 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri
388388
NSUInteger *lineRowsIndex = NULL;
389389
NSRange visibleRange;
390390
NSUInteger maximumNumberOfRows = 0;
391+
BOOL constraintSizeIsExtended = NO;
392+
CGRect constraintRectBeforeExtended = {0};
391393

392394
text = text.mutableCopy;
393395
container = container.copy;
@@ -399,12 +401,18 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri
399401
// CoreText bug when draw joined emoji since iOS 8.3.
400402
// See -[NSMutableAttributedString setClearColorToJoinedEmoji] for more information.
401403
static BOOL needFixJoinedEmojiBug = NO;
404+
// It may use larger constraint size when create CTFrame with
405+
// CTFramesetterCreateFrame in iOS 10.
406+
static BOOL needFixLayoutSizeBug = NO;
402407
static dispatch_once_t onceToken;
403408
dispatch_once(&onceToken, ^{
404409
double systemVersionDouble = [UIDevice currentDevice].systemVersion.doubleValue;
405410
if (8.3 <= systemVersionDouble && systemVersionDouble < 9) {
406411
needFixJoinedEmojiBug = YES;
407412
}
413+
if (systemVersionDouble >= 10) {
414+
needFixLayoutSizeBug = YES;
415+
}
408416
});
409417
if (needFixJoinedEmojiBug) {
410418
[((NSMutableAttributedString *)text) yy_setClearColorToJoinedEmoji];
@@ -420,6 +428,16 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri
420428
if (container.path == nil && container.exclusionPaths.count == 0) {
421429
if (container.size.width <= 0 || container.size.height <= 0) goto fail;
422430
CGRect rect = (CGRect) {CGPointZero, container.size };
431+
if (needFixLayoutSizeBug) {
432+
constraintSizeIsExtended = YES;
433+
constraintRectBeforeExtended = UIEdgeInsetsInsetRect(rect, container.insets);
434+
constraintRectBeforeExtended = CGRectStandardize(constraintRectBeforeExtended);
435+
if (container.isVerticalForm) {
436+
rect.size.width = YYTextContainerMaxSize.width;
437+
} else {
438+
rect.size.height = YYTextContainerMaxSize.height;
439+
}
440+
}
423441
rect = UIEdgeInsetsInsetRect(rect, container.insets);
424442
rect = CGRectStandardize(rect);
425443
cgPathBox = rect;
@@ -511,6 +529,19 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri
511529

512530
YYTextLine *line = [YYTextLine lineWithCTLine:ctLine position:position vertical:isVerticalForm];
513531
CGRect rect = line.bounds;
532+
533+
if (constraintSizeIsExtended) {
534+
if (isVerticalForm) {
535+
if (rect.origin.x + rect.size.width >
536+
constraintRectBeforeExtended.origin.x +
537+
constraintRectBeforeExtended.size.width) break;
538+
} else {
539+
if (rect.origin.y + rect.size.height >
540+
constraintRectBeforeExtended.origin.y +
541+
constraintRectBeforeExtended.size.height) break;
542+
}
543+
}
544+
514545
BOOL newRow = YES;
515546
if (rowMaySeparated && position.x != lastPosition.x) {
516547
if (isVerticalForm) {

0 commit comments

Comments
 (0)