【发布时间】:2017-12-05 06:08:50
【问题描述】:
我目前正在更新 iPhone X 的一些视图。根据this blog post 的说法,它应该是相当直截了当的,但是 - 像往常一样 - 它并不像预期的那样流畅。
如果你使用推荐的方式
public MyView()
{
InitializeComponent();
On<Xamarin.Forms.PlatformConfiguration.iOS>().SetUseSafeArea(true);
}
根据安全区域插图,视图的项目被赋予Margin,但这也适用于像SearchBar 这样的视图,它们已经适应了开箱即用的插图。使用上面的代码会导致搜索栏的灰色背景没有占据整个宽度,看起来很奇怪。
幸运的是,On<iOS> 有一个扩展方法 SafeAreaInsets(),它返回正确的插入 - 在某些条件下 - 例如可以分配给 BindableProperty。不幸的是,我们可以获得插图的条件不是很一致。
- 当
OnSizeAllocated第一次被调用时,SafeAreaInsets()会返回0,0,0,0 - 当视图显示时
SafeAreaInsets()返回正确的值(在OnAppearing) -
OnSizeAllocated旋转后称为乘法-
SafeAreaInsets()第一次返回正确值 - 第二次
SafeAreaInsets()返回0,0,0,0
-
我当前的工作解决方案是,如果SafeAreaInsets() 返回的Thickness 不是default(Thickness),则覆盖两者并仅设置我的可绑定属性(绑定到我的视图)。
我想知道是否有一种标准方法可以始终获得正确的插图,而无需检查插图是否具有合理的价值。
【问题讨论】:
-
你找到解决办法了吗?
-
值得一提的是您使用的是哪个版本的 Xamarin.Forms,以防它是/曾经是错误。