如何将集合单元格宽度设置为动态拉伸到手机宽度

时间:2014-11-25 01:46:16

标签: ios objective-c

如何将收集单元视图设置为动态拉伸到iphone屏幕宽度(例如iphone 5s,iphone 6 plus)?

我试过了:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    (ResultCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellClass
                                                                      forIndexPath:indexPath];

    cell.bounds = CGRectMake(0,0, self.view.bounds.size.width, 150);

    return cell;
}

这不起作用。我没有看到内容延伸到屏幕的右侧。

我尝试添加此委托方法:

- (CGSize)collectionView:(UICollectionView *)collectionView
            layout:(UICollectionViewLayout *)collectionViewLayout
            sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize cellSize;

    cellSize.width = self.view.bounds.size.width;

    // body view height
    cellSize.height = 150;

    return cellSize;
}

我在方法中设置了断点,但该方法永远不会被调用?

2 个答案:

答案 0 :(得分:13)

我对同一个用例有同样的问题。我终于结束了

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(collectionView.bounds.size.width, 150);
}

这会更改集合视图的每个项目(单元格)的大小。因此,您可以使用此更改每个单元格的大小。在这里,我需要单元格宽度与我的UICollectionView相同,所以我传递了UICollectionview的宽度和我想要的特定高度。希望这会有所帮助。

此外,无需在- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath中设置单元格边界,因为尺寸是通过- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath设置的

还要确保已将所需的Delegates & DataSources附加到UICollectionView

答案 1 :(得分:1)

单元格的大小由集合视图的布局对象指定。你使用的是UICollectionViewFlowLayout吗?尝试设置布局对象的itemSize属性或实现委托方法:collectionView:layout:sizeForItemAtIndexPath:

您将能够指定项目(单元格)相对于集合视图边界的大小。

请记住,您的集合视图也需要设置,以便随视图控制器调整大小。如果您正在使用应自动设置的UICollectionViewController。否则,您必须将集合视图约束到其超级视图的边界。

<强>更新

您可以直接在布局上设置布局的itemSize属性:

self.layout.itemSize = CGSizeMake(CGRectGetWidth(self.collectionView.bounds), 100);

或,(如果您正在处理轮换或调整大小,则更好),实施适当的委托回调:

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
     return CGSizeMake(CGRectGetWidth(collectionView.bounds), 100);
}

我建议您阅读相应的UICollectionView文档,以便更加熟悉集合视图及其布局的工作方式: