Xamarin CollectionView自动调整滚动视图插图工作不正常

Xamarin CollectionView自动调整滚动视图插图工作不正常,xamarin,xamarin.ios,uicollectionview,Xamarin,Xamarin.ios,Uicollectionview,我有一个选项卡,其中包含CollectionView。 最近我遇到了一个问题,第一个CollectionViews ContentInset在顶部是0,但只是在开始时。这意味着它不应该在顶部栏下,当我在选项卡栏中导航时,它会修复 我遵循了这一点,但解决方案根本不起任何作用。他们还建议将我的半透明顶栏设置为不透明,我真的希望避免这样做 这里有一张图片来解释更多。。。 以下是加载内容的方式: “我的收藏”视图中的项目显示在我的顶部栏下,这意味着ContentInset将设置为0,而不是正确地自动调

我有一个选项卡,其中包含CollectionView。 最近我遇到了一个问题,第一个CollectionViews ContentInset在顶部是0,但只是在开始时。这意味着它不应该在顶部栏下,当我在选项卡栏中导航时,它会修复

我遵循了这一点,但解决方案根本不起任何作用。他们还建议将我的半透明顶栏设置为不透明,我真的希望避免这样做

这里有一张图片来解释更多。。。 以下是加载内容的方式:

“我的收藏”视图中的项目显示在我的顶部栏下,这意味着ContentInset将设置为0,而不是正确地自动调整。 然后,当我通过选项卡栏导航时,它会固定在两个选项卡上,正如我前面所说的

我尝试从CollectionView中禁用AutomaticallyAdjustsScrollViewInsets,并根据导航栏和状态栏的大小手动执行

this.AutomaticallyAdjustsScrollViewInsets = false;
this.CollectionView.ContentInset = new UIEdgeInsets(UIApplication.SharedApplication.StatusBarFrame.Height + this.NavigationController.NavigationBar.Frame.Height, 0, 0, 0);
起初这似乎是可行的,但当我在选项卡栏中导航时,ContentInset会修改并向下移动,就好像AutomaticallyAdjustsScrollViewInsets设置为false不起作用一样


关于如何在不使导航栏不透明的情况下解决此问题,您有什么想法吗?

在ios 11上,如果您想像
AutomaticallyAdjustsScrollViewInsets
以前那样禁用此功能,我们应该使用
ContentInsetAdjustmentBehavior
。首先在
ViewDidLoad()
事件中将
automaticallyaadjustsscrollviewinsets
设置为false,以适应较低的iOS版本。然后在iOS 11+上添加以下代码:

public override void ViewWillAppear(bool animated)
{
    base.ViewWillAppear(animated);

    if (!AutomaticallyAdjustsScrollViewInsets)
    {
        if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
        {
            MyCollectionView.ContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.Never;
        }
    }
    else
    {
        if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
        {
            MyCollectionView.ContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.Automatic;
        }
    }
}

最后,您可以手动设置CollectionView的ContentInset以满足您的请求。

在ios 11上,如果您想禁用以前
自动调整滚动视图Insets所做的功能,我们应该使用
ContentInsetAdjustmentBehavior
。首先在
ViewDidLoad()
事件中将
automaticallyaadjustsscrollviewinsets
设置为false,以适应较低的iOS版本。然后在iOS 11+上添加以下代码:

public override void ViewWillAppear(bool animated)
{
    base.ViewWillAppear(animated);

    if (!AutomaticallyAdjustsScrollViewInsets)
    {
        if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
        {
            MyCollectionView.ContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.Never;
        }
    }
    else
    {
        if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
        {
            MyCollectionView.ContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.Automatic;
        }
    }
}

最后,您可以手动设置CollectionView的ContentInset以满足您的要求。

OH!!很好,这是整整一周的寻找解决方案,你是救世主,非常感谢!很高兴它帮助了你。哦!!很好,这是整整一周的寻找解决方案,你是救世主,非常感谢!很高兴它帮助了你。