iOS 上的 ScrollView 内容触控
当触摸手势在 iOS 上的 ScrollView
内开始,并且 ScrollView
根据计时器范围内的用户操作决定是应处理手势还是将其传递给其内容时,将触发隐式计时器。 默认情况下,iOS ScrollView
会延迟内容触控,但在某些情况下这会造成问题,导致 ScrollView
内容无法在应当的时候识别手势。 因此,该平台特定内容控制是让 ScrollView
处理触控手势,还是将其传递给其内容。 通过将 ScrollView.ShouldDelayContentTouches
附加属性设置为 boolean
值在 XAML 中使用它:
<FlyoutPage ...
xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core">
<FlyoutPage.Flyout>
<ContentPage Title="Menu" BackgroundColor="Blue" />
</FlyoutPage.Flyout>
<FlyoutPage.Detail>
<ContentPage>
<ScrollView x:Name="scrollView" ios:ScrollView.ShouldDelayContentTouches="false">
<StackLayout Margin="0,20">
<Slider />
<Button Text="Toggle ScrollView DelayContentTouches" Clicked="OnButtonClicked" />
</StackLayout>
</ScrollView>
</ContentPage>
</FlyoutPage.Detail>
</FlyoutPage>
或者,可以使用 Fluent API 从 C# 使用它:
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.iOSSpecific;
...
scrollView.On<iOS>().SetShouldDelayContentTouches(false);
该 ScrollView.On<iOS>
方法指定此平台特定仅在 iOS 上运行。 Xamarin.Forms.PlatformConfiguration.iOSSpecific
命名空间中的 ScrollView.SetShouldDelayContentTouches
方法用于控制 ScrollView
是处理触控手势还是将其传递给其内容。 此外,SetShouldDelayContentTouches
方法还可用于通过调用 ShouldDelayContentTouches
方法返回内容触控否延迟,从而切换延迟内容触控:
scrollView.On<iOS>().SetShouldDelayContentTouches(!scrollView.On<iOS>().ShouldDelayContentTouches());
结果是,ScrollView
可以禁用延迟接收内容触控,因此在此方案中,Slider
接收手势而不是 FlyoutPage
的 Detail
页: