diff --git a/src/iOS/Avalonia.iOS/CombinedSpan3.cs b/src/iOS/Avalonia.iOS/CombinedSpan3.cs index 13faea1848..e9fda8e489 100644 --- a/src/iOS/Avalonia.iOS/CombinedSpan3.cs +++ b/src/iOS/Avalonia.iOS/CombinedSpan3.cs @@ -16,7 +16,7 @@ internal ref struct CombinedSpan3 public int Length => Span1.Length + Span2.Length + Span3.Length; - static void CopyFromSpan(ReadOnlySpan from, int offset, ref Span to) + static void CopyFromSpan(ReadOnlySpan from, ref int offset, ref Span to) { if(to.Length == 0) return; @@ -33,8 +33,8 @@ internal ref struct CombinedSpan3 public void CopyTo(Span to, int offset) { - CopyFromSpan(Span1, offset, ref to); - CopyFromSpan(Span2, offset, ref to); - CopyFromSpan(Span3, offset, ref to); + CopyFromSpan(Span1, ref offset, ref to); + CopyFromSpan(Span2, ref offset, ref to); + CopyFromSpan(Span3, ref offset, ref to); } } diff --git a/src/iOS/Avalonia.iOS/TextInputResponder.cs b/src/iOS/Avalonia.iOS/TextInputResponder.cs index 97b104b918..b1575645c8 100644 --- a/src/iOS/Avalonia.iOS/TextInputResponder.cs +++ b/src/iOS/Avalonia.iOS/TextInputResponder.cs @@ -220,15 +220,17 @@ partial class AvaloniaView string result = ""; if (string.IsNullOrEmpty(_markedText)) + { if(surroundingText != null && r.EndIndex < surroundingText.Length) { result = surroundingText[r.StartIndex..r.EndIndex]; } + } else { var span = new CombinedSpan3(surroundingText.AsSpan().Slice(0, currentSelection.Start), _markedText, - surroundingText.AsSpan().Slice(currentSelection.Start)); + surroundingText.AsSpan().Slice(currentSelection.Start, currentSelection.End - currentSelection.Start)); var buf = new char[r.EndIndex - r.StartIndex]; span.CopyTo(buf, r.StartIndex); result = new string(buf);