在我的 UIViewContoller 的子类中,ViewWillAppear 询问是否有任何数据要呈现,如果有,则相应地更改 UINavigationController 的提示。当提示弹出到 View 中时,这会触发动画,导致 UINavigationBar 变大。发生这种情况时,它会部分遮挡 UICollectionView 顶行中的单元格。
我的垂直自动布局约束为 0,似乎将 UICollectionView 固定到它最近的邻居,这应该是它的 super View ,但导航栏仍然阻挡单元格的上半部分。我已经尝试了所有方法 - 告诉 CollectionView 布局其 subview 、重新加载数据等,但似乎没有任何效果。知道出了什么问题吗?
- (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
。我尝试在 navigationController:didShowViewController:animated:
、viewWillAppear
、viewDidAppear
和 viewDidLayoutSubviews
上调用它们> 无济于事。
最佳答案
你试过吗?
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
return YES;
}
关于ios - UICollectionView 和 UINavigationController 不合作 - 设置提示时导航 Controller 遮挡单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029205/