在iOS 10中使用tabbar控制器时,错误地计算了集合视图的高度

时间:2018-04-04 16:22:09

标签: ios objective-c uicollectionview uitabbarcontroller

我创建了一个标签栏控制器,其中包含一个容器视图的示例视图控制器。容器嵌入了referencedStoryBoard。 enter image description here

参考故事板包含一个视图控制器,其中嵌入了collectionView控制器。 enter image description here

当我的app运行时,collectionView单元格的高度计算错误。集合视图单元格隐藏在顶部。

注意: 1)集合视图滚动方向是水平的。在垂直方面它的工作好处

2)当我没有使用tabBar时,collectionView单元格高度正在正确计算。

您可以在此链接中找到示例项目:https://drive.google.com/open?id=1GbKC_ZhqQAlcLnD24YgxQTZt2toVprwF

这个问题在iOS11中运行良好。

3 个答案:

答案 0 :(得分:1)

问题(在我看来):

  • 在启动时SampleCollectionViewController创建时具有正常大小(可能是全屏大小)。此时,创建collectionView并重新加载。 collectionViewCell的大小是根据SampleCollectionViewController的大小计算的。
  • 但在此之后,SampleCollectionViewController嵌入了另一个尺寸较小的控制器中。 SampleCollectionViewController更改的大小,但collectionView未重新加载且collectionViewCell保持启动大小。
  • 现在collectionViewCell的高度大于屏幕上SampleCollectionViewController的大小。这就是隐藏单元格顶部的原因。

解决方案:在invalidateLayout方法中调用traitCollectionDidChange:。这意味着当更改SampleCollectionViewController的大小时,计算单元格大小并更新正确大小的单元格。

SampleCollectionViewController.m

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
  [super traitCollectionDidChange:previousTraitCollection];

  [self.collectionView.collectionViewLayout invalidateLayout];
}

Project works normally on my side.

答案 1 :(得分:0)

在故事板中选择您的视图控制器。检查是否选择了调整滚动视图插入,然后取消选中它。多数民众赞成我如何解决我的问题。

答案 2 :(得分:0)

当我更改设计时,我能够解决iOS 10的问题。在iOS 11上工作也很好。

enter image description here

我没有创建故事板参考的容器视图,而是创建了一个segue来调用storyboard参考。由于问题是针对iOS 10和水平集合视图的,因此我将继续讨论问题中提到的早期设计。