Xamarin.forms Forms ScrollView ScrollToAsync行为

Xamarin.forms Forms ScrollView ScrollToAsync行为,xamarin.forms,xamarin.android,Xamarin.forms,Xamarin.android,在Android上运行ScrollView的ScrollToAsync功能时,我遇到了一些问题,目前还没有在iOS上测试。 我使用的是Xamarin.Forms版本2.5.1.444934,使用的是.Net标准 在Android Emulator(8.0,API26)和Google Pixel(8.1 API27)上进行测试,两者都有相同的问题 我使用NavigationPage和Navigation.PushAsync在页面之间移动(因此每个页面上都有导航栏) 我想创建一个自动填充字段控件,用

在Android上运行ScrollView的ScrollToAsync功能时,我遇到了一些问题,目前还没有在iOS上测试。 我使用的是Xamarin.Forms版本2.5.1.444934,使用的是.Net标准 在Android Emulator(8.0,API26)和Google Pixel(8.1 API27)上进行测试,两者都有相同的问题

我使用NavigationPage和Navigation.PushAsync在页面之间移动(因此每个页面上都有导航栏)

我想创建一个自动填充字段控件,用户键入前几个字母,然后在数据库/静态字符串列表中查找结果,并在下面显示结果,供用户单击/点击。 我使用复合控件(下面标记为有趣的框架内容)完成了这项工作。 我遇到的问题是滚动视图以显示结果

我的页面具有以下布局层次结构:-

ContentPage
    StackLayout
        ScrollView
            StackLayout
                Frame (some label and entry fields inside a stack layout)
                Frame (some label and entry fields inside a stack layout)
                Frame (some label and entry fields inside a stack layout)
                Frame (the interesting one that deals with scrolling)
                    StackLayout
                        Heading Label
                        StackLayout
                            Label x:Name="ScrollToLabel"
                            Entry x:Name="ScrollToEntry"
                            Grid x:Name="ScrollToGrid"
                            Entry x:Name="Hidden" Text="I should stay visible as you type"
                        /StackLayout
                    /StackLayout
                /Frame
                Frame (some label and entry fields inside a stack layout)
                Frame (some label and entry fields inside a stack layout)
            /StackLayout
        /ScrollView
        StackLayout
            Button Text = Done
        /StackLayout
    /StackLayout
/ContentPage
当用户单击/轻触ScrollToEntry时,键盘将打开并将控件平移到键盘上方(到目前为止还可以)。 当用户开始在ScrollToEntry中输入时,代码将使用最多5个结果填充ScrollToGrid。 在这一点上,我想确保网格结果对于用户点击是可见的。 我尝试了两种不同的选项,ScrollToAsync(ScrollToLabel,Start)和ScrollToAsync(Hidden,MakeVisible)

这两种工作都不是我想要的100%的时间

ScrollToAsync(ScrollToLabel, Start)
如果ScrollToEntry位于屏幕底部,则导航栏将隐藏,视图向上平移过远。 滚动标签现在已脱离屏幕顶部。 单击/轻触第二个字母时,导航栏将恢复并正确滚动,滚动标签位于屏幕顶部。 如果ScrollToEntry位于屏幕顶部附近,则导航栏不会隐藏,并且可以正确滚动

ScrollToAsync(Hidden, MakeVisible)
这是我的首选选项,因为它只会滚动到需要显示所有结果的地方(不是一直滚动到顶部)。 这比第一个更糟糕。 在大多数情况下,它根本不会滚动,我假设它认为它已经可见,但实际上在键盘后面? 如果它确实滚动,隐藏的标签仍然不会显示(我使用HeightRequest=“0”版本和可见版本进行了测试,两者结果相同)

我尝试使用下面的代码更改调整大小

Application.Current.On<Xamarin.Forms.PlatformConfiguration.Android>().UseWindowSoftInputModeAdjust(WindowSoftInputModeAdjust.Resize);
Application.Current.On().UseWindowsOfInputModeAdjust(WindowsOfInputModeAdjust.Resize);
2个问题, 1.由于调整了大小,“完成”按钮现在位于键盘上方,占用了空间。 2.单击“硬件后退”按钮(而不是“完成”或“导航后退”按钮)时,上一个视图现在在键盘所在的位置有一个空白。 如果使用“完成”或“返回导航”,屏幕最初显示为空白,但随后刷新为全屏

我已经创建了一个示例应用程序来突出显示问题(默认情况下使用平移,而不是调整大小)。 这是我使用的布局的最简单版本


是我做错了什么,还是就是这样?如果它是如何工作的,这一定是一个错误?如果我做错了,有人能告诉我什么或建议其他方法吗?

你好,你解决了吗?嗨,没有。问题仍然存在。升级到xamarin.forms v3并没有解决问题。而且,在iOS上,它似乎根本没有滚动。