ios – UICollectionViewFlowLayout不会使方向更改失效

我有一个UICollectionView与UICollectionViewFlowLayout。我也实现了UICollectionViewDelegateFlowLayout协议。

在我的数据源中,我有一堆UIViewControllers响应自定义协议,所以我可以要求他们的大小和一些其他的东西。

在FlowLayout委托中,当它要求sizeForItemAtIndexPath :,我返回我从我的协议获得的项目大小。实现我的协议的ViewController会根据方向返回不同的项目大小。

现在,如果我将设备方向从纵向更改为横向,则没有问题(项目在景观中较大),但如果我改回它,我得到这个警告:

    the item width must be less that the width of the UICollectionView minus the section insets left and right values.
    Please check the values return by the delegate.

它仍然工作,但我不喜欢它得到警告,所以也许你可以告诉我我做错了什么。还有另一个问题。如果我不告诉我的collectionViews collectionViewLayout在willAnimateRotationToInterfaceOrientation中无效:sizeForItemAtIndexPath:从不被调用。

希望你明白我的意思如果你需要额外的信息让我知道:)

一个解决方案是使用KVO并监听您的集合视图的超级视图的框架。调用-reloadData将会工作并且摆脱警告。这里有一个基本的时间问题

// -loadView
[self.view addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];

// -dealloc
[self.view removeObserver:self forKeyPath:@"frame"];

// KVO Method
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    [collectionView_ reloadData];
}
http://stackoverflow.com/questions/16341778/uicollectionviewflowlayout-not-invalidating-right-on-orientation-change

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ios – UICollectionViewFlowLayout不会使方向更改失效