Freigeben über


Inhalte bei Toucheingaben in Scrollansichten unter iOS

Wenn in einem ScrollView unter iOS eine Touchgeste beginnt, wird ein impliziter Timer ausgelöst. Das ScrollView entscheidet auf der Grundlage der Benutzeraktion innerhalb der Timer-Spanne, ob es die Geste verarbeiten oder an seinen Inhalt weitergeben soll. Standardmäßig verzögert das iOS ScrollView die Inhalte bei Toucheingaben. Dies kann jedoch unter bestimmten Umständen zu Problemen führen, wenn der ScrollView Inhalt die Geste nicht rechtzeitig gewinnt. Daher steuert die plattformspezifische Funktion .NET Multi-Platform App UI (.NET MAUI), ob ein ScrollView eine Touchgeste verarbeitet oder an seinen Inhalt weitergibt. Sie wird in XAML verwendet, indem die angefügte Eigenschaft ScrollView.ShouldDelayContentTouches auf einen boolean-Wert festgelegt wird:

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

Alternativ kann sie mit der Fluent-API von C# genutzt werden:

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

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

Die Methode ScrollView.On<iOS> gibt an, dass diese plattformspezifische Funktion nur unter iOS ausführbar ist. Die Methode ScrollView.SetShouldDelayContentTouches im Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific-Namespace wird verwendet, um zu steuern, ob eine ScrollView Touchgeste verarbeitet oder an den Inhalt übergeben wird. Darüber hinaus kann die Methode SetShouldDelayContentTouches zum Umschalten verzögerter Inhaltseingaben verwendet werden. Dafür wird die Methode ShouldDelayContentTouches aufgerufen, die zurückgibt, ob Inhaltseingaben verzögert werden:

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

Als Ergebnis kann eine ScrollView die Verzögerung des Empfangs von Inhalten bei Toucheingaben deaktivieren, sodass in diesem Szenario das Slider die Geste empfängt und nicht die Seite Detail der FlyoutPage:

ScrollView Delay Content Touches Platform-Specific.