滚动型ScrollView
使用ScrollView显示不能适合一个屏幕的布局,并且内容为键盘腾出空间。
ScrollView
包含布局并使它们能够在屏幕之外滚动。ScrollView
还用于允许视图在键盘显示时自动移动到屏幕的可见部分。
本文包括:
- 目的 - 使用目的
ScrollView
及时间。 - 用法 - 如何
ScrollView
在实践中使用。 - 属性 - 可以读取和修改的公共属性。
- 方法 - 可以调用滚动视图的公共方法。
- 事件 - 可用于监听视图状态中的更改的事件。
目的
ScrollView
可以用于确保较小的视图在较小的手机上显示良好。例如,在iPhone 6上工作的布局可能会在iPhone 4上被裁剪。使用ScrollView
将允许布局的剪辑部分显示在较小的屏幕上。
用法
ScrollView
不应该嵌套。另外,
ScrollView
s不应该嵌套与提供滚动的其他控件,如
ListView
和
WebView
。
ScrollView
公开Content
可以设置为单个视图或布局的属性。考虑一个具有非常大的boxView的布局的例子,其次是Entry
:
<ContentPage.Content>
<ScrollView>
<StackLayout>
<BoxView BackgroundColor="Red" HeightRequest="600" WidthRequest="150" />
<Entry />
</StackLayout>
</ScrollView>
</ContentPage.Content>
在C#中:
var scroll = new ScrollView();
Content = scroll;
var stack = new StackLayout();
stack.Children.Add(new BoxView { BackgroundColor = Color.Red, HeightRequest = 600, WidthRequest = 600 });
stack.Children.Add(new Entry());
在用户向下滚动之前,只有BoxView
可见:
请注意,当用户开始在其中输入文本时Entry
,视图滚动以使其在屏幕上可见:
属性
ScrollView具有以下属性:
- 内容 - 获取或设置要显示的视图
ScrollView
。 - ContentSize - 只读,获取内容的大小,其宽度和高度分量。这是一个可绑定的属性
- 取向 -这是一个
ScrollOrientation
,这是可以被设置为一个枚举Horizontal
,Vertical
或Both
。 - ScrollX - 只读,获取X维当前的滚动位置。
- ScrollY - 只读,在Y维度中获取当前滚动位置。
方法
ScrollView
提供了一种ScrollToAsync
方法,可用于使用坐标滚动视图或通过指定应显示的特定视图。
当使用坐标时,指定x
和y
坐标,以及一个布尔值,表示滚动是否应该是动画的:
scroll.ScrollToAsync(0, 150, true); //scrolls so that the position at 150px from the top is visible
scroll.ScrollToAsync(label, ScrollToPosition.Start, true); //scrolls so that the label is at the start of the list
当滚动到特定元素时,ScrollToPosition
枚举会指定元素在视图中的显示位置:
- 中心 - 将元素滚动到视图的可见部分的中心。
- 结束 - 将元素滚动到视图的可见部分的末尾。
- MakeVisible - 滚动元素,使其在视图中可见。
- 开始 - 将元素滚动到视图的可见部分的开头。
该IsAnimated
属性指定视图将如何滚动。当设置为true时,将使用平滑的动画,而不是立即将内容移动到视图中。
活动
ScrollView
只暴露一个事件Scrolled
。Scrolled
当视图完成滚动时,它被提升。事件处理程序Scrolled
需要ScrolledEventArgs
,它具有ScrollX
和ScrollY
性能。以下演示如何使用当前滚动位置更新标签ScrollView
:
Label label = new Label { Text = "Position: " };
ScrollView scroll = new ScrollView();
scroll.Scrolled += (object sender, ScrolledEventArgs e) => {
label.Text = "Position: " + e.ScrollX + " x " + e.ScrollY;
};
请注意,由于在列表末尾滚动时的弹跳效果,滚动位置可能为负。