CollectionView AutomaticallyAdjustsScrollViewInsets无法正常工作

时间:2018-06-08 15:19:28

标签: xamarin xamarin.ios uicollectionview

我有一个包含CollectionViews的TabBar。 最近我遇到了第一个CollectionViews ContentInset在顶部为0的问题,但仅在第一时间。这意味着当它不应该在TopBar下面时,当我浏览TabBar时,它会修复。

我遵循了question,但解决方案根本没有做任何事情。他们还建议将我的半透明TopBar变得不透明,我真的想避免这样做。

这是一张图片来解释一下...... 这是内容的加载方式: enter image description here

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

我尝试从CollectionView中禁用AutomaticallyAdjustsScrollViewInsets,并考虑导航栏和状态栏的大小手动执行此操作。

this.AutomaticallyAdjustsScrollViewInsets = false;
this.CollectionView.ContentInset = new UIEdgeInsets(UIApplication.SharedApplication.StatusBarFrame.Height + this.NavigationController.NavigationBar.Frame.Height, 0, 0, 0);

这似乎首先起作用,但是当我浏览TabBar时,ContentInset会修改并向下移动,就好像AutomaticallyAdjustsScrollViewInsets设置为false一样无效。

关于如何在不打开导航栏不透明的情况下解决此问题的任何想法?

1 个答案:

答案 0 :(得分:2)

在ios 11上,如果您要禁用之前AutomaticallyAdjustsScrollViewInsets执行的功能,我们应该使用ContentInsetAdjustmentBehavior。首先在AutomaticallyAdjustsScrollViewInsets事件中将ViewDidLoad()设置为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以满足您的请求。