在我的 UIViewContoller 的子类中,ViewWillAppear 询问是否有要呈现的数据,如果有,则相应地更改 UINavigationController 的提示。这会在提示弹出时触发动画,从而导致 UINavigationBar 的大小增加。发生这种情况时,它会部分遮挡 UICollectionView 顶行中的单元格。
我有一个 0 的垂直自动布局约束,似乎将 UICollectionView 固定到它最近的邻居,这应该是它的超级视图,但导航栏仍然挡住了单元格的上半部分。我已经尝试了所有方法——告诉 CollectionView 布局其子视图、重新加载数据等,但似乎没有任何效果。知道出了什么问题吗?
- (void)viewWillAppear:(BOOL)animated{
if(self.orderedURLSet.count == 0){
self.navigationItem.prompt = nil;
[self.collectionView setNeedsDisplay];
} else {
self.navigationItem.prompt = @"Tap photos to edit";
}
[self.collectionView reloadData];
[self.collectionView layoutSubviews];
}
编辑:让这更奇怪的是,当我旋转方向时,collectionViewCells 没有被遮挡,并且当我旋转回纵向方向时,完整的单元格仍然可见。有什么方法可以让我的应用程序“欺骗”我的应用程序认为它的布局已经改变并且它需要重新定位单元格?LayoutSubviews 没有做到这一点。
编辑:在深入研究 UIView 文档之后,看起来 setNeedsLayout 和 layoutIfNeeded 确实是我应该使用的方法,而不是layoutSubviews
. 我试过打电话给他们两个,on navigationController:didShowViewController:animated:
, viewWillAppear
, viewDidAppear
,viewDidLayoutSubviews
无济于事。