如何在 Xamarin.Forms 中创建与位置相同的 UI 块:固定在 HTML 中?

How to create UI block in Xamarin.Forms same as position: fixed in HTML?

这是我使用 Grid 和 ScrollView 的尝试:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
     x:Class="MobApp.TestPage">
<ContentPage.Content>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="40" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <Label Text="News Header" Grid.Column="0" Grid.Row="0" />

    <ScrollView Grid.Column="0" Grid.Row="1">
        <StackLayout x:Name="NewsItems">
            <StackLayout>
                <Label Text="News 1 Title" />
                <Label Text="News 1 Text" />
            </StackLayout>
            <StackLayout>
                <Label Text="News 2 Title" />
                <Label Text="News 2 Text" />
            </StackLayout>
            <StackLayout>
                <Label Text="News 3 Title" />
                <Label Text="News 3 Text" />
            </StackLayout>
            <StackLayout>
                <Label Text="News 4 Title" />
                <Label Text="News 4 Text" />
            </StackLayout>
            <StackLayout>
                <Label Text="News 5 Title" />
                <Label Text="News 5 Text" />
            </StackLayout>
            <StackLayout>
                <Label Text="News 6 Title" />
                <Label Text="News 6 Text" />
            </StackLayout>
            <StackLayout>
                <Label Text="News 7 Title" />
                <Label Text="News 7 Text" />
            </StackLayout>
        </StackLayout>
    </ScrollView>
</Grid>

但是在 Android 4.4 (API 19) 上滚动时,Emulator ScrollView 内容与 Label "News Header" 重叠。另外手册中强烈建议不要使用嵌套的ScrollView。

我该如何解决这个任务?

这可能只是第一个的情况 Grid RowDefinition Height 需要稍微增加或设置为 auto (如果你不介意循环计算命中 )

<Grid.RowDefinitions>
    <RowDefinition Height="40" />
    <RowDefinition Height="*" />
</Grid.RowDefinitions>

是的,不要使用嵌套 scrollview 它没有意义并且可能会表现得不合理

更新

也许尝试更改滚动视图中的 VerticalOptions<Label Text="News Header"

LayoutOptions

更新 2

也尝试删除网格上的列和控件上的列说明符,我在考虑列之前遇到过奇怪的布局问题

也尝试用网格替换堆栈布局。

Note : I know these suggestions are hit and miss however sometimes you just need to tweak things until they work unfortunately

一个迷人的现象,花了我几天的时间)这个任务确实是通过 Grid + ScrollView 解决的,从我的例子来看一切正常。显然我的模拟器有问题。这一切都始于我注意到安装 Xamarin 后默认提供的模拟器 (Nougat 7.1) 会根据需要显示滚动条。我理解并开始挖掘。我创建的所有模拟器(从 4.4 到 7.0 的任何 api)都显示了带有上述错误的滚动条。更改/复制或重新创建默认提供的相同模拟器不起作用,模拟器管理器诅咒某种错误。我挖得更深,花了很多时间和精力,但结果得到了回报:

  1. 已将 Android SDK 更新至 26(最新)版本
  2. 已将 Xamarin Android 模拟器管理器更新到最新版本
  3. 在 BIOS 中启用硬件虚拟化技术
  4. 通过 Android 的 SDK 包管理器,安装了 HAXM。但实际上,它并没有安装,只是下载了,之后你需要在你的电脑上另外找到它(我在C:\Program Files (x86)\Android\android-sdk\extras\intel\Hardware_Accelerated_Execution_Manager)和运行 intelhaxm -android.exe
  5. 圆满结束。之后,我创建的模拟器正确显示了所有数据。