Pau*_*her 8 xamarin.forms iphone-x
我目前正在为iPhone X更新一些视图.根据这篇博文,它应该是相当直接的,但是 - 像往常一样 - 它并不像它应该的那样平滑.
如果您使用推荐的方式
public MyView()
{
InitializeComponent();
On<Xamarin.Forms.PlatformConfiguration.iOS>().SetUseSafeArea(true);
}
Run Code Online (Sandbox Code Playgroud)
视图的项目Margin根据安全区域插入给出,但这也适用于SearchBar已经适应开箱即用插图的视图.使用上面的代码将导致搜索栏的灰色背景不占据整个宽度,这看起来很奇怪.
幸运的是,On<iOS>有一个扩展方法SafeAreaInsets(),它返回正确的插入 - 在某些条件下 - 例如可以分配给一个BindableProperty.不幸的是,我们获得内容的条件并不十分一致.
OnSizeAllocated第一次被召唤时,SafeAreaInsets()将返回0,0,0,0SafeAreaInsets()返回正确的值(in OnAppearing)OnSizeAllocated 旋转后称为乘法
SafeAreaInsets()返回正确的值SafeAreaInsets()回来了0,0,0,0我当前的工作解决方案是,如果Thickness返回的SafeAreaInsets()不是,则覆盖两者并仅设置我的可绑定属性(绑定到我的视图)default(Thickness).
我想知道是否有一种标准的方法来始终获得正确的插入,而不必检查插入是否具有声音值.
我对此做了一些研究。这是我的一些想法:
您实际上可以UseSafeArea在 XAML ( docs ) 中设置 - 这只是仅供参考
的设置SafeArea发生在使用这个扩展方法时,它基本上设置了SafeAreaInsetsPropertyKey属性,然后Padding在UpdatePadding方法中更新页面。这里的问题是,什么调用该扩展方法并设置它?我检查了 Xamarin.Forms github 存储库,答案很简单。PageRenderer当iOSViewSafeAreaInsetsDidChange调用时,它会从调用。这意味着您并不确切知道 iOS 何时决定通知您当前的问题 - 您在不同时间使用不同的插图值看到的问题。SafeArea
我知道这绝对不是任何人想要的,但您可以覆盖默认的 iOSPageRenderer并连接到ViewSafeAreaInsetsDidChange覆盖。一旦它被调用,你就可以 100% 确定你有当前的SafeArea插入值。
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |