You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI iOS平台Entry获焦时ScrollToAsync失效导致键盘遮挡问题求助

.NET MAUI iOS平台Entry获焦时ScrollToAsync失效导致键盘遮挡问题求助

各位好,我现在在开发.NET MAUI的登录界面,用ScrollView实现垂直滚动功能。在Android平台上一切正常——当用户点击邮箱输入框时,屏幕会自动滚动,确保“注册”按钮始终保持在可见区域内。但到了iOS平台,ScrollToAsync(SignUpButton, ScrollToPosition.Start, false)的表现完全不符合预期:它要么往上滚动,要么干脆没有任何反应,看起来键盘弹出时ScrollView的垂直偏移量没有被正确调整。

以下是我简化后的布局和代码:

布局代码

<ScrollView x:Name="MainScroll" Orientation="Vertical" Padding="0" VerticalOptions="FillAndExpand">
    <StackLayout>
        <!-- 邮箱输入框 -->
        <Entry x:Name="txtEmail" Placeholder="Email" Focused="Entry_Focused" />
        <!-- 密码输入框(代码省略) -->
        <!-- 注册按钮 -->
        <Button x:Name="SignUpButton" Text="Don't have an Account? Sign Up" />
    </StackLayout>
</ScrollView>

后台逻辑代码

private async void Entry_Focused(object sender, FocusEventArgs e)
{
    try
    {
        if (sender is VisualElement element)
        {
#if IOS
            await Task.Delay(1200); // iOS键盘动画延迟
#endif
            await Task.Delay(100); // 小缓冲延迟
            await MainScroll.ScrollToAsync(SignUpButton, ScrollToPosition.Start, false);
        }
    }
    catch (Exception ex)
    {
        // 必要时处理异常
    }
}

我已经尝试过的方法:

  • 切换不同的滚动位置参数:
    • await MainScroll.ScrollToAsync(SignUpButton, ScrollToPosition.End, false);
    • await MainScroll.ScrollToAsync(SignUpButton, ScrollToPosition.Center, false);
  • 针对iOS键盘动画增加了1200ms的延迟
  • 使用Timer结合MainThread.BeginInvokeOnMainThread()来触发滚动操作
  • 调整布局设置(比如Grid的Row属性、VerticalOptions属性)
  • 确认iOS项目中已经设置了UseSafeArea="True"

目前还是没解决问题,有没有哪位大佬能给个靠谱的 workaround 或者建议呀?万分感谢!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 10:44:36