ios boundingRectWithSize 崩溃

199 阅读1分钟

复现条件:

1.0xa0(即html中的&nbsp)与换行符一起
2.alignment = NSTextAlignmentJustified
3.字符串触发换行

    NSString *errorEmpty = @"xxxxx \n";
    NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.alignment = NSTextAlignmentJustified;
    NSDictionary *dic = @{
        NSFontAttributeName: [NSFont systemFontOfSize:26],
        NSParagraphStyleAttributeName: paragraphStyle
    };
    
    NSAttributedString *stringWithAttributes =[[NSAttributedString alloc] initWithString:errorEmpty attributes:dic];
    CGRect rect = [stringWithAttributes boundingRectWithSize:CGSizeMake(50, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin)];

崩溃堆栈:

Assertion failed: (forceBreakIndex > NSMaxRange(lastResortNode->lineBreak.range)), 
function -[_NSOptimalLineBreaker _calculateOptimalWrapping],
file NSOptimalLineBreaker.m, line 1762.

0   ???                           	    0x7ff8993d69a8 ???
1   libsystem_kernel.dylib        	    0x7ff8097a31f2 __pthread_kill + 10
2   libsystem_pthread.dylib       	    0x7ff8097daee6 pthread_kill + 263
3   libsystem_c.dylib             	    0x7ff809701b45 abort + 123
4   libsystem_c.dylib             	    0x7ff809700e5e __assert_rtn + 314
5   UIFoundation                  	    0x7ff80d9e6bb3 -[_NSOptimalLineBreaker _calculateOptimalWrapping].cold.5 + 35
6   UIFoundation                  	    0x7ff80d93d98e -[_NSOptimalLineBreaker _calculateOptimalWrapping] + 2994
7   UIFoundation                  	    0x7ff80d99637e -[NSParagraphArbitrator _computeOptimalLayout] + 332
8   UIFoundation                  	    0x7ff80d99617a -[NSParagraphArbitrator _optimalLineBreakContextBeforeIndex:lineFragmentWidth:range:] + 104
9   UIFoundation                  	    0x7ff80d8aabc2 -[NSParagraphArbitrator lineBreakContextBeforeIndex:lineFragmentWidth:range:] + 105
10  UIFoundation                  	    0x7ff80d92407b -[NSCoreTypesetter _createLineRefForParentLineRef:range:availableWidth:offset:paragraphArbitrator:lineBreakMode:hyphenated:forcedClusterBreak:] + 546
11  UIFoundation                  	    0x7ff80d926f43 -[NSCoreTypesetter _stringDrawingCoreTextEngineWithOriginalString:rect:padding:graphicsContext:forceClipping:attributes:stringDrawingOptions:drawingContext:stringDrawingInterface:] + 9145
12  UIFoundation                  	    0x7ff80d87a9ce __NSStringDrawingEngine + 2257
13  UIFoundation                  	    0x7ff80d8cbc03 -[NSString(NSExtendedStringDrawing) boundingRectWithSize:options:attributes:context:] + 159