0

我正在做一些手动定位,需要考虑到ios上的安全区域。

我遇到的问题是,当我在 OnAppearing 方法中时,SafeAreaInserts 方法返回的厚度值为 0。旋转设备后(在 SizeChanged 事件中),情况不再如此。由于进入视图时不会触发 SizeChanged,因此我找不到设置 SafeAreaInsets 时引发的事件。

var safeInsets = On().SafeAreaInsets();

本主题中,我发现已更改 SafeAreaInsert 的事件“稍后”触发,但我的共享 Xamarin.Forms 项目中似乎没有此事件。

4

1 回答 1

1

对于该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

于 2020-12-31T10:42:16.587 回答