Toques de conteúdo scrollView no iOS

Baixar exemplo Baixar o exemplo

Um temporizador implícito é disparado quando um gesto de toque começa em um ScrollView no iOS e o ScrollView decide, com base na ação do usuário dentro do período de temporizador, se ele deve manipular o gesto ou passá-lo para seu conteúdo. Por padrão, o iOS ScrollView atrasa toques de conteúdo, mas isso pode causar problemas em algumas circunstâncias com o ScrollView conteúdo não ganhando o gesto quando deveria. Portanto, essa plataforma específica controla se um manipula um ScrollView gesto de toque ou o passa para seu conteúdo. Ele é consumido em XAML definindo a ScrollView.ShouldDelayContentTouches propriedade anexada como um boolean valor:

<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>

Como alternativa, ele pode ser consumido do C# usando a API fluente:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.iOSSpecific;
...

scrollView.On<iOS>().SetShouldDelayContentTouches(false);

O ScrollView.On<iOS> método especifica que esse específico da plataforma só será executado no iOS. O ScrollView.SetShouldDelayContentTouches método, no Xamarin.Forms.PlatformConfiguration.iOSSpecific namespace , é usado para controlar se um manipula um ScrollView gesto de toque ou o passa para seu conteúdo. Além disso, o SetShouldDelayContentTouches método pode ser usado para alternar o atraso de toques de conteúdo chamando o método para retornar se os ShouldDelayContentTouches toques de conteúdo estão atrasados:

scrollView.On<iOS>().SetShouldDelayContentTouches(!scrollView.On<iOS>().ShouldDelayContentTouches());

O resultado é que um ScrollView pode desabilitar o atraso no recebimento de toques de conteúdo, para que, nesse cenário, o Slider receba o gesto em vez Detail da página do FlyoutPage:

ScrollView Delay Content Touches Platform-Specific