ios - UICollectionView 和 UINavigationController 不合作 - 设置提示时导航 Controller 遮挡单元格

标签 ios objective-c uinavigationcontroller uicollectionview autolayout

在我的 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:viewWillAppearviewDidAppearviewDidLayoutSubviews 上调用它们> 无济于事。

最佳答案

你试过吗?


- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
    return YES;
}

关于ios - UICollectionView 和 UINavigationController 不合作 - 设置提示时导航 Controller 遮挡单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029205/

相关文章:

iOS Swift 内存错误,在模拟器上不会发生?

ios - AVAssetExportSession 在输出视频的右侧和底部给我一个绿色边框

ios - 如何将数据从 viewController 分配给 tableViewCell 标签?

iphone - 如何查看以模态方式呈现的 View Controller

iphone - 在 UINavigationController 层次结构中刷新 UITableView 的最佳方法是什么

ios - UIDate Picker 上带有栏按钮的可调整大小的工具栏

ios - 不兼容的指针类型用类型为“BaseClass *”的表达式初始化 'SubClass *__strong'

iOS : Fail to use Global object class - Singleton

ios - UINavigationController:在 iPad 上呈现 View Controller ,同时关闭另一个 Controller

iOS8:在 prepareForSegue 中推送 View Controller 使其闪烁