diff --git a/src/Core/src/Platform/iOS/KeyboardAutoManagerScroll.cs b/src/Core/src/Platform/iOS/KeyboardAutoManagerScroll.cs index 85865b5df29a..c64ee8ff0314 100644 --- a/src/Core/src/Platform/iOS/KeyboardAutoManagerScroll.cs +++ b/src/Core/src/Platform/iOS/KeyboardAutoManagerScroll.cs @@ -307,17 +307,18 @@ internal static async Task AdjustPositionDebounce() { if (IsKeyboardShowing) { - // If we are going to a new view that has an InputAccessoryView - // while we have the keyboard up, we need a delay to recalculate - // the height of the InputAccessoryView - if (View?.InputAccessoryView is not null) - { - await Task.Delay(30); - } + // Universal 30ms delay for all input controls to ensure proper timing coordination + // between keyboard auto-scroll and safe area adjustments. + // This delay allows the InputAccessoryView setup completion for input controls. + // Safe area system to process keyboard notifications first + // Conflict resolution between auto-scroll and SafeAreaEdges.SoftInput settings + // Without this delay, timing conflicts can cause double padding or incorrect positioning + await Task.Delay(30); + AdjustPosition(); // See if the layout requests to scroll again after our initial scroll - await Task.Delay(5); + await Task.Delay(30); if (ShouldScrollAgain) { AdjustPosition();