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 は受信コンテンツのタッチの遅延を無効にできるため、このシナリオでは、FlyoutPageDetail ページではなく、Slider がジェスチャを受信します。

ScrollView でのプラットフォーム固有のコンテンツ タッチ遅延