如何在 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"
更新 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)都显示了带有上述错误的滚动条。更改/复制或重新创建默认提供的相同模拟器不起作用,模拟器管理器诅咒某种错误。我挖得更深,花了很多时间和精力,但结果得到了回报:
- 已将 Android SDK 更新至 26(最新)版本
- 已将 Xamarin Android 模拟器管理器更新到最新版本
- 在 BIOS 中启用硬件虚拟化技术
- 通过 Android 的 SDK 包管理器,安装了 HAXM。但实际上,它并没有安装,只是下载了,之后你需要在你的电脑上另外找到它(我在C:\Program Files (x86)\Android\android-sdk\extras\intel\Hardware_Accelerated_Execution_Manager)和运行 intelhaxm -android.exe
- 圆满结束。之后,我创建的模拟器正确显示了所有数据。
这是我使用 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"
更新 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)都显示了带有上述错误的滚动条。更改/复制或重新创建默认提供的相同模拟器不起作用,模拟器管理器诅咒某种错误。我挖得更深,花了很多时间和精力,但结果得到了回报:
- 已将 Android SDK 更新至 26(最新)版本
- 已将 Xamarin Android 模拟器管理器更新到最新版本
- 在 BIOS 中启用硬件虚拟化技术
- 通过 Android 的 SDK 包管理器,安装了 HAXM。但实际上,它并没有安装,只是下载了,之后你需要在你的电脑上另外找到它(我在C:\Program Files (x86)\Android\android-sdk\extras\intel\Hardware_Accelerated_Execution_Manager)和运行 intelhaxm -android.exe
- 圆满结束。之后,我创建的模拟器正确显示了所有数据。