gpt4 book ai didi

xamarin.forms - 在 Xamarin.Forms 中获取 iPhone X 安全区域插图的一致方法是什么

转载 作者:行者123 更新时间:2023-12-04 08:40:39 26 4
gpt4 key购买 nike

我目前正在为 iPhone X 更新一些 View 。根据 this blog post它应该是相当直截了当的,但是 - 像往常一样 - 它并不像它应该的那样顺利。

如果您使用推荐的方式

public MyView()
{
InitializeComponent();

On<Xamarin.Forms.PlatformConfiguration.iOS>().SetUseSafeArea(true);
}

View 的项目被赋予 Margin根据安全区域插图,但这适用于 SearchBar 等 View ,也已经适应了开箱即用的插图。使用上面的代码会导致搜索栏的灰色背景没有占据整个宽度,这看起来很奇怪。

幸运的是 On<iOS>有一个扩展方法 SafeAreaInsets()它返回正确的插图 - 在某些条件下 - 例如可以分配给 BindableProperty .不幸的是,我们可以获得插图的条件不是很一致。
  • OnSizeAllocated第一次调用,SafeAreaInsets()将返回 0,0,0,0
  • 显示 View 时SafeAreaInsets()返回正确的值(在 OnAppearing 中)
  • OnSizeAllocated旋转后称为乘法
  • 第一次SafeAreaInsets()返回正确的值
  • 第二次SafeAreaInsets()返回 0,0,0,0

  • 我当前的工作解决方案是,如果 ThicknessSafeAreaInsets() 返回不是 default(Thickness) .

    我想知道如果有一种标准方法可以始终获得正确的插图,而无需检查插图是否具有合理的值(value)。

    最佳答案

    我对此做了一些研究。以下是我的一些想法:

  • 您实际上可以设置 UseSafeArea在 XAML (docs) 中 - 仅供引用
  • SafeArea 的设置使用 this extension method 时发生,它基本上设置了 SafeAreaInsetsPropertyKey属性,然后是页面 PaddingUpdatePadding 中更新方法。这里的问题是,什么调用该扩展方法并设置它呢?我检查了 Xamarin.Forms github repo,答案很简单。它从 PageRenderer 调用, 当 ViewSafeAreaInsetsDidChange iOS 调用.这意味着您不确切知道 iOS 何时决定通知您当前的 SafeArea - 您在不同时间使用不同的插图值看到的问题。

  • 我知道这绝对不是任何人想要的,但你可以覆盖默认的 iOS PageRenderer并连接到 ViewSafeAreaInsetsDidChange覆盖。一旦它被调用,你可以 100% 确定你有当前的 SafeArea插入值。

    关于xamarin.forms - 在 Xamarin.Forms 中获取 iPhone X 安全区域插图的一致方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47647103/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com