diff --git a/ios/observers/FocusedInputObserver.swift b/ios/observers/FocusedInputObserver.swift index f6b9226a30..0c7e8da2d3 100644 --- a/ios/observers/FocusedInputObserver.swift +++ b/ios/observers/FocusedInputObserver.swift @@ -142,7 +142,9 @@ public class FocusedInputObserver: NSObject { setupObservers() // dispatch onSelectionChange on focus if let textInput = responder as? UITextInput { - updateSelectionPosition(textInput: textInput, sendEvent: onSelectionChange) + DispatchQueue.main.async { + updateSelectionPosition(textInput: textInput, sendEvent: self.onSelectionChange) + } } syncUpLayout() diff --git a/src/components/KeyboardAwareScrollView/index.tsx b/src/components/KeyboardAwareScrollView/index.tsx index f053104197..70245b64e6 100644 --- a/src/components/KeyboardAwareScrollView/index.tsx +++ b/src/components/KeyboardAwareScrollView/index.tsx @@ -295,6 +295,11 @@ const KeyboardAwareScrollView = forwardRef< lastSelection.value = e; + // pre iOS 16 case, when selection event delivered between `onStart` and `onMove` events + if (keyboardWillAppear.value) { + updateLayoutFromSelection(); + } + if (e.target !== lastTarget) { // ignore this event, because "focus changed" event handled in `useSmoothKeyboardHandler` return;