gpt4 book ai didi

ios - 如何在旋转时定义 CollectionView 的大小

转载 作者:IT老高 更新时间:2023-10-28 11:42:17 26 4
gpt4 key购买 nike

我有一个带有 2 个 CollectionView Controller 的 View Controller 。

我希望在轮换中只有一个 Collection View 调整为自定义大小,而另一个保持不变。

我试过用:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout  *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
// Adjust cell size for orientation
if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
return CGSizeMake(170.f, 170.f);
}
return CGSizeMake(192.f, 192.f);
}

但是,这只会改变两个 Collection View 。如何让它只针对一个集合?

最佳答案

这是我的 2 美分 - 因为您的项目大小是静态的,为什么不在 collectionViewLayout 上设置项目大小?

这样做会更快,而不是期望 Collection View 为每个单元格调用其委托(delegate)方法。

viewWillLayoutSubviews 可用于检测 View Controller 上的旋转。invalidateLayout 可用于 Collection View 布局,以强制它再次准备布局,从而在这种情况下以新尺寸定位元素。

- (void)viewWillLayoutSubviews;
{
[super viewWillLayoutSubviews];
UICollectionViewFlowLayout *flowLayout = (id)self.firstCollectionView.collectionViewLayout;

if (UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication.statusBarOrientation)) {
flowLayout.itemSize = CGSizeMake(170.f, 170.f);
} else {
flowLayout.itemSize = CGSizeMake(192.f, 192.f);
}

[flowLayout invalidateLayout]; //force the elements to get laid out again with the new size
}

编辑:更新为 Swift2.0 示例

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else {
return
}

if UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication().statusBarOrientation) {
flowLayout.itemSize = CGSize(width: 170, height: 170)
} else {
flowLayout.itemSize = CGSize(width: 192, height: 192)
}

flowLayout.invalidateLayout()
}

关于ios - 如何在旋转时定义 CollectionView 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18988028/

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