xamarin.forms - 当 View.OnAppearing 被触发时 SafeAreaInsets 为 0
问题描述
我正在做一些手动定位,需要考虑到ios上的安全区域。
我遇到的问题是,当我在 OnAppearing 方法中时,SafeAreaInserts 方法返回的厚度值为 0。旋转设备后(在 SizeChanged 事件中),情况不再如此。由于进入视图时不会触发 SizeChanged,因此我找不到设置 SafeAreaInsets 时引发的事件。
var safeInsets = On().SafeAreaInsets();
在本主题中,我发现已更改 SafeAreaInsert 的事件“稍后”触发,但我的共享 Xamarin.Forms 项目中似乎没有此事件。
解决方案
对于该ViewSafeAreaInsetsDidChange
方法,它从 PageRenderer 中调用。您可以覆盖默认 iOSPageRenderer
并连接到ViewSafeAreaInsetsDidChange
覆盖。
public override void ViewSafeAreaInsetsDidChange()
{
var page = (Element as Page);
if (page != null && Forms.IsiOS11OrNewer)
{
var insets = NativeView.SafeAreaInsets;
if(page.Parent is TabbedPage)
{
insets.Bottom = 0;
}
page.On<PlatformConfiguration.iOS>().SetSafeAreaInsets(new Thickness(insets.Left, insets.Top, insets.Right, insets.Bottom));
}
base.ViewSafeAreaInsetsDidChange();
}
有关更多详细信息,您可以查看下面的链接。https://github.com/xamarin/Xamarin.Forms/blob/4d49e5786a4c9cfc6eea00bbaa5b57bc09679186/Xamarin.Forms.Platform.iOS/Renderers/PageRenderer.cs
推荐阅读
- javascript - Slimselect:搜索后选择第二个选项不起作用
- spring-kafka - KafkaTemplate.send(键,值,主题)与自定义分区?
- python - 方差分析 Python_Urgent
- azure-table-storage - 对 Azure 表使用 Get Entities 操作时,如何删除 odata.etag?
- mongodb - MongoDB聚合管道内部数组映射
- java - 我们可以将 ENUM 中的属性文件数据作为常量获取吗
- firebase - Flutter - 如何使用相同的 Bloc 通过日历查询 Firestore 中的特定条目?
- python - Python & Numpy - 如何删除每个数字/元素的最后 2 位数字?
- c# - DataContract,默认 DataMember 值将 api 在应用程序之间工作
- python - 使用正则表达式提取时间