[iOS] Bugfix/22469 ios label crash #22487
Open
+171
−122
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of Change
I have found an alternative approach for calculating span regions to prevent crashes. Please try launching Issue22469 UITest with using original FormattedStringExtensions on the iPhone 15/XS simulator to reproduce the crash.
In the original approach, the DefaultLineHeight is calculated and used to determine the number of text lines associated with the span, which is different from the number of lines returned by EnumerateLineFragments -> multilineRects. This causes an "argument out of range" exception in the loop at line 249, where the loop assumes that the line height count is equal to multilineRects.Count.
Instead, I am always using EnumerateLineFragments and I am trying to calculate each rect depending on line glyph indexes of this line fragment.
Video of Label controls page tests
https://github.com/dotnet/maui/assets/3391032/93f67658-71a5-4705-ab89-71004f4ad2d7
Issues Fixed
Fixes #22469