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 接收手势而不是 FlyoutPageDetail 页:

ScrollView 延迟内容触控平台特定