0

在我的 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无济于事。

4

1 回答 1

1

你有没有尝试过??


- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
    return YES;
}
于 2013-10-23T14:50:14.357 回答