ios - 容器 View 中的 UICollectionView

标签 ios objective-c uicollectionview uicontainerview redraw

说明:

我有一个 View Controller ,它包含一个包含 7 个单元格的 Collection View 。当我显示这个 Controller 时,一切正常并且显示完美( Controller A)。 在另一个 Controller ( Controller B)上,我有一个容器 View ,它嵌入了 Controller A 和 Collection View 。

问题:

当运行应用程序并进入 Controller B(嵌入 Controller A)时, Controller A 的所有 subview 看起来都不错,除了 Collection View 。在这种情况下,我没有看到我的 7 个单元格,而是只看到 6 个单元格,在点击其中一个单元格后,最后一个单元格出现在单元格行中,现在看起来不错(?!)。 它就像正在重绘 Collection View ,我找不到原因或如何修复它。

感谢任何帮助。

编辑

这是我的流程布局,我从 viewDidLoad 调用它:

-(void) setFlowLayout {
    BOOL isIphone = (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad);
    float baseWidth = [[UIScreen mainScreen] bounds].size.width;
    int width;

    width = floor(baseWidth / 7.0);
    float space = baseWidth - (width * 7.0f);
    space /= 7.0;

    UICollectionViewFlowLayout * flow = [[UICollectionViewFlowLayout alloc] init];

    if(isIphone) {
        flow.itemSize = CGSizeMake(width, kCellHeight);
    }
    else{
        flow.itemSize = CGSizeMake(width, kCellSizeIpad);
    }

    flow.minimumInteritemSpacing = space;
    flow.headerReferenceSize = CGSizeMake(_collectionDays.frame.size.width, kSpacing);
    flow.footerReferenceSize = CGSizeZero;
    flow.scrollDirection = UICollectionViewScrollDirectionVertical;

    [_collectionDays setCollectionViewLayout:flow];
}

我还使用它来将单元格放置在 Collection View 的中间:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
    CGFloat cellSpacing = ((UICollectionViewFlowLayout *) collectionViewLayout).minimumInteritemSpacing;
    CGFloat cellWidth = ((UICollectionViewFlowLayout *) collectionViewLayout).itemSize.width;
    NSInteger cellCount = [collectionView numberOfItemsInSection:section];
    CGFloat inset = (collectionView.bounds.size.width - (cellCount * (cellWidth + cellSpacing))) * 0.5;
    inset = MAX(inset, 0.0);

    return UIEdgeInsetsMake(0.0, inset, 0.0, inset);
}

this is the BAD part, not all 7 cells there

thats how it should look like

最佳答案

到目前为止还没有答案,但我找到了修复它的方法。 我一直在尝试解决它,我认为它与容器在绘制时调整大小有关。

我在 viewDidLayoutSubviews 中使用从其父 View Controller 调用 Collection View 的 layoutIfNeeded 来修复它。

所以如果有人遇到它,这是修复它的一种方法。

希望听到更好的方式\解释。

-(void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    [_collectionDays layoutIfNeeded];
    [_collectionDays reloadData];
}

关于ios - 容器 View 中的 UICollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39116505/

相关文章:

ios - react native ios 警报相互覆盖

ios - 如何通过列名和数据类型获取值?

ios - Odd RTCReporting bug

iphone - 如何允许用户在 iOS 中浏览/选择设备中的文件

ios - 在 iPad Pro 中不工作的单个 UIViewController 上禁用自动旋转

iphone - 如何使用ldid?

Objective-C – 构建用于后台处理的 GCD 代码

ios - CollectionView 方向问题

ios - 推送后如何将用户带到选定的索引

ios - 有没有办法阻止 UICollectionView 重复使用单元格?