Application termination due to the uncaught exception "CALayerInvalidGeometry", reason: "CALayer bounds contains NaN: [0 nan; 280 524] '

I am developing a book application in which users can change the font size in a TextView.

when users change the font size, the application saves the current position of the text so as not to change it after users have changed the font size.

It works fine in most cases, but sometimes when users change the font size, the application gets this error, and I still can’t figure out how to fix it.

Application Completion due uncaught exception "CALayerInvalidGeometry", cause: "CALayer bounds comprises NaN: [0 nan; 280524] '* Origin call stack cast: (0x3231e3e7 0x3a019963 0x3231e307 0x33edb4d7 0x33edb30d 0x3419141f 0x3419b82f 0x342d1cf1 0x3414f80d 0xe7bf1 0xe607d 0xfad35 0x34218087 0x34218111 0x34218087 0x34218015 0x3421803b 0x342178cb 0x34217db9 0x341405f9 0x3412d8e1 0x3412d1ef 0x35e455f7 0x35e45227 0x322f33e7 0x322f338b 0x322f220f 0x3226523d 0x3226bfbf0fbf23

I also cannot reproduce this problem 100%, as this problem sometimes happens.

This is the code. Anyone have an idea to fix this? Thanks in advance.

- (UITextRange *)getCurrentTextRange:(UITextView *)textView { CGRect bounds = textView.bounds; UITextPosition *start = [textView characterRangeAtPoint:bounds.origin].start; UITextPosition *end = [textView positionFromPosition:start offset:1]; UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end]; return textRange; } - (void)changeFontSize:(UIButton*)button { UITextRange *textRange = [self getCurrentTextRange:_textView]; int fontSize = [[NSUserDefaults standardUserDefaults] integerForKey:@"fontSize"]; //button.tag == 1 => decreaseFontSize if (button.tag == 1) { //set a minimum size if (fontSize <= [LSUniversalManager getFontSizeForMinimum]) { return; } fontSize--; //button.tag == 2 => increaseFontSize } else if (button.tag == 2) { fontSize++; } _textView.font = [UIFont systemFontOfSize:fontSize]; [[NSUserDefaults standardUserDefaults] setInteger:fontSize forKey:@"fontSize"]; //avoid shifting the scroll position after changing font size CGRect rect = [_textView firstRectForRange:textRange]; [_textView setContentOffset:CGPointMake(0, rect.origin.y)]; } 
+8
ios iphone calayer crash
source share
1 answer

Somewhere near this line you get an invalid output that causes the rect value NaN (the special value float means "not a valid floating point number", most often caused by division by zero). Is it possible that you passed an invalid or meaningless UITextRange to -firstRectForRange ? What happens if UITextPosition *start refers to the last character in the text when you then create another text position, which is one character per end?

+14
source share

All Articles