Xamarin Forms - 如何让 TableView 和 ListView 扩展到 iPhone X 安全区域?

Posted

技术标签:

【中文标题】Xamarin Forms - 如何让 TableView 和 ListView 扩展到 iPhone X 安全区域?【英文标题】:Xamarin Forms - How to have TableView and ListView Extend into iPhone X Safe Area? 【发布时间】:2019-08-08 20:45:04 【问题描述】:

我在页面构造函数中使用了特定于平台的使用安全区域,但 tableview 和 listview 被向上推,并且不会延伸到页面底部。例如,在附图中,您可以看到 tableview 灰色没有延伸到页面底部。如何填写?

【问题讨论】:

你能解决这个问题吗?我有一个列表视图,我希望它与主页指示器重叠(如果它扩展了屏幕),但如果我滚动到末尾,它应该考虑它并将最后一个元素移动到主页指示器上方。 @SebastianGreifeneder 我确实修复了它,但不是我想要的方式。我单独关闭了该页面的安全区域,它工作正常。我猜因为它只是一个列表视图,它知道该怎么做。如果页面有更多视图而不仅仅是列表视图,这将不起作用。我为其他页面保留了安全区域,这些都很好。 我可以确认您提到的行为。如果列表视图是 ContentPage 的子视图,那么它可以开箱即用,您甚至不必指定安全区域。如果列表视图在布局中,则不起作用。 【参考方案1】:

您需要设置页面的BackgroundColor。 UseSafeArea 仅添加填充,因此无论 ContentPage 的 BackgroundColor 是什么都将被公开。如果你想让它成为你的tableview灰色,你需要设置ContentPage.BackgroundColor = Color.Gray

【讨论】:

这会在底部栏上提供不同的灰色。我也不喜欢这个,因为如果 ios 13 改变了 tableview 的外观或打开了 iOS 暗模式怎么办?它不会像在 iOS 中那样将视图向下延伸到底部,其中 tableview 将是全屏但单元格不会向下到底部而是在栏上方停止。 您可以将其设置为您想要的任何颜色。您可以使用十六进制来获得完全相同的灰色阴影以匹配 tableview。至于暗模式,您应该使用 DynamicResources 来考虑颜色。当用户切换到深色模式时,您的应用应使用适当的配色方案。如果您指的是 iOS 13s 系统范围的暗模式,那么这在您的应用程序中并不是自动的。你必须让你的应用处理它。 我指的是 iOS 13 的系统范围的暗模式,它在带有表格视图的本机应用程序中是自动的。我所有的原生非 xamarin 应用程序都会自动改变颜色。他们还可以正确处理单元格内容超出屏幕底部的安全区域。【参考方案2】:

事实上,在你的情况下,你想要安全区域。

所以将UseSafeArea 设置为false,并自己处理填充。

【讨论】:

当单元格数量下降到屏幕下方时,这不适用于列表视图。在原生 Xcode 应用程序上,使用安全区域可以解决此问题。【参考方案3】:

您可以为 iPhone 安全区域添加以下代码。

xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core" 
           ios:Page.UseSafeArea="true"

【讨论】:

以上是关于Xamarin Forms - 如何让 TableView 和 ListView 扩展到 iPhone X 安全区域?的主要内容,如果未能解决你的问题,请参考以下文章

如何从列表Xamarin Forms中获取所选项目?

Xamarin.Forms 如何使按钮出现在一行中

如何自定义 Xamarin.Forms 应用程序?

如何在 Xamarin.Forms 中创建永无止境的后台服务?

构建Xamarin.Forms NuGet

Xamarin.Forms 4.0 CollectionView 下拉刷新