uicollectionview细胞框架在肖像和景观

时间:2014-11-11 10:19:53

标签: ios xcode uicollectionview

我被困在uicollectionview单元格框架中 我想做的是,

在iPad的横向模式中我想显示3个细胞, 在肖像2细胞中。

当我在方法- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath中编写框架代码时 它不会影响框架的大小。

我通过应用调试器检查它是否会使用此方法。 但它的到来又恢复了它的大小。

默认情况下,我必须以横向方式启动我的应用程序,然后在需要时以纵向方式启动。

以下是它在风景中的表现

enter image description here

这里的细胞是如何看待肖像的

enter image description here

这是我的代码

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
  //return [self.cellSizes[indexPath.item] CGSizeValue];
    if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
    {
        return CGSizeMake(100, 100);
    }
    return CGSizeMake(200, 200);
}

我传递的是什么价值,框架根本没有变化。 我没有在任何地方传递任何其他帧值。

我想首先给单元格框架赋予硬编码值,然后进行动态处理。 但我只是停留在第一位。 任何人都可以帮助我。

提前致谢。

3 个答案:

答案 0 :(得分:0)

对于动态集合视图单元,您可以使用这样的集合视图方法。

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
  return 1;
    }

 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:  (NSInteger)section{
    return [_elements count];
   }

  -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
   static NSString *cellIdentifier = @"cell";
    MosaicCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
   MosaicData *data = [_elements objectAtIndex:indexPath.row];
   cell.mosaicData = data;

    float randomWhite = (arc4random() % 40 + 10) / 255.0;
    cell.backgroundColor = [UIColor colorWithWhite:randomWhite alpha:1];
     return cell;
   }

有关详细信息,您可以看到此示例。这是您需要的完美示例 https://github.com/betzerra/MosaicLayout

答案 1 :(得分:0)

我面临类似的问题,所以基本上你应该在你的视图控制器中实现UICollectionViewDelegateFlowLayout,否则设计一个自定义collectionviewcell并在你的视图控制器中注册,它肯定会工作。试试吧。

在我的情况下 我通过继承UICollectionViewCell添加了xib并相应地设计它,它可以工作,所以你可以尝试。

答案 2 :(得分:0)

当方向发生变化时,您需要重新加载集合视图。因此将调用CGRect size方法让单元格重新创建单元格。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    // do something after rotation
    [_collectView reloadData];
}

添加此方法并重新加载您的集合视图,以便调用- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath并更改大小。 感谢