当触摸手势在 iOS 上的 ScrollView 内开始,并且 ScrollView 根据计时器范围内的用户操作决定是应处理手势还是将其传递给其内容时,将触发隐式计时器。 默认情况下,iOS ScrollView 会延迟内容触控,但在某些情况下这会造成问题,导致 ScrollView 内容无法在应当的时候识别手势。 因此,此特定于 .NET 多平台应用 UI (.NET MAUI) 平台的功能可控制 ScrollView 是处理触控手势还是将其传递给其内容。 通过将 ScrollView.ShouldDelayContentTouches
附加属性设置为 boolean
值在 XAML 中使用它:
<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>
或者,可以使用 Fluent API 从 C# 使用它:
using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;
...
scrollView.On<iOS>().SetShouldDelayContentTouches(false);
该 ScrollView.On<iOS>
方法指定此平台特定仅在 iOS 上运行。 Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific
命名空间中的 ScrollView.SetShouldDelayContentTouches
方法用于控制 ScrollView 是处理触控手势还是将其传递给其内容。 此外,SetShouldDelayContentTouches
方法还可用于通过调用 ShouldDelayContentTouches
方法返回内容触控否延迟,从而切换延迟内容触控:
scrollView.On<iOS>().SetShouldDelayContentTouches(!scrollView.On<iOS>().ShouldDelayContentTouches());
结果是,ScrollView 可以禁用延迟接收内容触控,因此在此方案中,Slider 接收手势而不是 FlyoutPage 的 Detail
页: