Compartir a través de


Toques de contenido ScrollView en iOS

Un temporizador implícito se desencadena cuando un gesto táctil comienza en un ScrollView en iOS y ScrollView decide, en función de la acción del usuario dentro del intervalo del temporizador, tanto si debe controlar el gesto como pasarlo a su contenido. De forma predeterminada, el ScrollView de iOS retrasa los toques de contenido, pero esto puede causar problemas en algunas circunstancias con el contenido ScrollView que no gana el gesto cuando debe. Por lo tanto, esta plataforma específica de .NET Multi-platform App UI (.NET MAUI) controla si ScrollView gestiona un gesto táctil o lo pasa a su contenido. Se consume en XAML estableciendo la propiedad ScrollView.ShouldDelayContentTouches adjunta en un valor boolean:

<FlyoutPage ...
            xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls">
    <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, se puede consumir desde C# mediante la API fluida:

using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;
...

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

El método ScrollView.On<iOS> especifica que esta plataforma específica solo se ejecutará en iOS. El método ScrollView.SetShouldDelayContentTouches, en el espacio de nombres Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific, se usa para controlar si ScrollView gestiona un gesto táctil o lo pasa a su contenido. Además, el método SetShouldDelayContentTouches se puede usar para alternar los toques de contenido retrasado llamando al método ShouldDelayContentTouches para volver si se retrasan los toques de contenido:

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

El resultado es que un objeto ScrollView puede deshabilitar el retraso de la recepción de toques de contenido, de modo que en este escenario el Slider recibe el gesto en lugar de la página Detail de FlyoutPage:

ScrollView Delay Content Touches Platform-Specific.