gpt4 book ai didi

ios - UICollectionView 在边界更改时使布局无效

转载 作者:IT王子 更新时间:2023-10-29 08:02:14 28 4
gpt4 key购买 nike

我目前有以下代码段用于计算 UICollectionViewCells 大小:

- (CGSize)collectionView:(UICollectionView *)mainCollectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)atIndexPath
{
CGSize bounds = mainCollectionView.bounds.size;
bounds.height /= 4;
bounds.width /= 4;
return bounds;
}

这行得通。但是,我现在在 viewDidLoad 中添加了一个键盘观察器(它在 UICollectionView 出现之前触发了委托(delegate)和数据源方法,并从 Storyboard 中调整了自身的大小) .因此界限是错误的。我也想支持轮换。如果 UICollectionView 改变大小,处理这两种边缘情况并重新计算大小的好方法是什么?

最佳答案

当 Collection View 的边界发生变化时使布局无效的解决方案是覆盖 shouldInvalidateLayoutForBoundsChange: 并返回 YES。文档中也有说明:https://developer.apple.com/documentation/uikit/uicollectionviewlayout/1617781-shouldinvalidatelayoutforboundsc

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

这也应该包括轮换支持。如果没有,实现 viewWillTransitionToSize:withTransitionCoordinator:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size
withTransitionCoordinator:coordinator];

[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
[self.collectionView.collectionViewLayout invalidateLayout];
}
completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
}];
}

关于ios - UICollectionView 在边界更改时使布局无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29023473/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com