Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UICollectionView仅在一个方向上动态调整大小的单元格_Ios_Objective C_Autolayout - Fatal编程技术网

Ios UICollectionView仅在一个方向上动态调整大小的单元格

Ios UICollectionView仅在一个方向上动态调整大小的单元格,ios,objective-c,autolayout,Ios,Objective C,Autolayout,是否有一种方法可以仅在一个方向(如高度)动态调整UICollectionViewCells的大小,同时使宽度跟随布局的itemSize维度?或者是全部还是全部没有?苹果公司在iOS 8上提供了一个api,名为“自我调整单元格”,非常好用(它确实有一些问题,但与好处相比,这些问题相当小) 要使用它,您必须做两件事: 在单元格中设置自动布局,以便可以从约束中获得高度和宽度 只需将集合视图布局对象的estimatedItemSize属性设置为非零值: UICollectionViewFlowLayou

是否有一种方法可以仅在一个方向(如高度)动态调整
UICollectionViewCell
s的大小,同时使宽度跟随布局的itemSize维度?或者是全部还是全部没有?

苹果公司在iOS 8上提供了一个api,名为“自我调整单元格”,非常好用(它确实有一些问题,但与好处相比,这些问题相当小)

要使用它,您必须做两件事:

  • 在单元格中设置自动布局,以便可以从约束中获得高度和宽度

  • 只需将集合视图布局对象的estimatedItemSize属性设置为非零值:

    UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
    collectionViewLayout.estimatedItemSize = //your estimated item size
    

  • 这就是自调整单元格大小的方法(有关更多信息,请观看WWDC 2014视频“表格和集合视图中的新增内容”)!如果您想要更细粒度的控制,您可能需要将iOS 8中的UICollectionViewLayout子类化…

    是苹果公司提供的一种称为自调整大小单元的api,非常好用(它确实有一些问题,但与好处相比,这些问题相当小)

    要使用它,您必须做两件事:

  • 在单元格中设置自动布局,以便可以从约束中获得高度和宽度

  • 只需将集合视图布局对象的estimatedItemSize属性设置为非零值:

    UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
    collectionViewLayout.estimatedItemSize = //your estimated item size
    

  • 这就是自调整单元格大小的方法(有关更多信息,请观看WWDC 2014视频“表格和集合视图中的新增内容”)!如果您想要更细粒度的控制,您可能需要将iOS 8中的UICollectionViewLayout子类化…

    是苹果公司提供的一种称为自调整大小单元的api,非常好用(它确实有一些问题,但与好处相比,这些问题相当小)

    要使用它,您必须做两件事:

  • 在单元格中设置自动布局,以便可以从约束中获得高度和宽度

  • 只需将集合视图布局对象的estimatedItemSize属性设置为非零值:

    UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
    collectionViewLayout.estimatedItemSize = //your estimated item size
    

  • 这就是自调整单元格大小的方法(有关更多信息,请观看WWDC 2014视频“表格和集合视图中的新增内容”)!如果您想要更细粒度的控制,您可能需要将iOS 8中的UICollectionViewLayout子类化…

    是苹果公司提供的一种称为自调整大小单元的api,非常好用(它确实有一些问题,但与好处相比,这些问题相当小)

    要使用它,您必须做两件事:

  • 在单元格中设置自动布局,以便可以从约束中获得高度和宽度

  • 只需将集合视图布局对象的estimatedItemSize属性设置为非零值:

    UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
    collectionViewLayout.estimatedItemSize = //your estimated item size
    

  • 这就是自调整单元格大小的方法(有关更多信息,请观看WWDC 2014视频“表格和集合视图中的新增内容”)!如果您想要更细粒度的控件,可能需要将UICollectionViewLayout子类化…

    您可以从NIB创建一个用于调整大小的单元格,例如:

    _sizingCell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCell class]) owner:self options:nil] firstObject];
    
    假设MyCell有一个exmpl的标题标签。然后,您可以让自动布局在collectionView:layout:sizeForItemAtIndexPath:

    NSString *title = self.items[indexPath.item];
    self.sizingCell.titleLabel.text = item.title;
    
    CGSize size = [self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    
    return CGSizeMake(size.width, 33);
    
    此操作可能需要一段时间,因此我建议缓存计算值。让我们创建属性
    NSCache*cellWidthCache

    NSString *title = self.items[indexPath.item];
    self.sizingCell.titleLabel.text = item.title;
    
    NSNumber *cachedWidth = [self.cellWidthCache objectForKey:indexPath];
    
    if (!cachedWidth) {
        cachedWidth = @([self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].width);
        [self.cellWidthCache setObject:cachedWidth forKey:indexPath];
    }
    
    return CGSizeMake(cachedWidth.floatValue, 33);
    

    可以从NIB创建用于调整大小的单元格,例如:

    _sizingCell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCell class]) owner:self options:nil] firstObject];
    
    假设MyCell有一个exmpl的标题标签。然后,您可以让自动布局在collectionView:layout:sizeForItemAtIndexPath:

    NSString *title = self.items[indexPath.item];
    self.sizingCell.titleLabel.text = item.title;
    
    CGSize size = [self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    
    return CGSizeMake(size.width, 33);
    
    此操作可能需要一段时间,因此我建议缓存计算值。让我们创建属性
    NSCache*cellWidthCache

    NSString *title = self.items[indexPath.item];
    self.sizingCell.titleLabel.text = item.title;
    
    NSNumber *cachedWidth = [self.cellWidthCache objectForKey:indexPath];
    
    if (!cachedWidth) {
        cachedWidth = @([self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].width);
        [self.cellWidthCache setObject:cachedWidth forKey:indexPath];
    }
    
    return CGSizeMake(cachedWidth.floatValue, 33);
    

    可以从NIB创建用于调整大小的单元格,例如:

    _sizingCell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCell class]) owner:self options:nil] firstObject];
    
    假设MyCell有一个exmpl的标题标签。然后,您可以让自动布局在collectionView:layout:sizeForItemAtIndexPath:

    NSString *title = self.items[indexPath.item];
    self.sizingCell.titleLabel.text = item.title;
    
    CGSize size = [self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    
    return CGSizeMake(size.width, 33);
    
    此操作可能需要一段时间,因此我建议缓存计算值。让我们创建属性
    NSCache*cellWidthCache

    NSString *title = self.items[indexPath.item];
    self.sizingCell.titleLabel.text = item.title;
    
    NSNumber *cachedWidth = [self.cellWidthCache objectForKey:indexPath];
    
    if (!cachedWidth) {
        cachedWidth = @([self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].width);
        [self.cellWidthCache setObject:cachedWidth forKey:indexPath];
    }
    
    return CGSizeMake(cachedWidth.floatValue, 33);
    

    可以从NIB创建用于调整大小的单元格,例如:

    _sizingCell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCell class]) owner:self options:nil] firstObject];
    
    假设MyCell有一个exmpl的标题标签。然后,您可以让自动布局在collectionView:layout:sizeForItemAtIndexPath:

    NSString *title = self.items[indexPath.item];
    self.sizingCell.titleLabel.text = item.title;
    
    CGSize size = [self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    
    return CGSizeMake(size.width, 33);
    
    此操作可能需要一段时间,因此我建议缓存计算值。让我们创建属性
    NSCache*cellWidthCache

    NSString *title = self.items[indexPath.item];
    self.sizingCell.titleLabel.text = item.title;
    
    NSNumber *cachedWidth = [self.cellWidthCache objectForKey:indexPath];
    
    if (!cachedWidth) {
        cachedWidth = @([self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].width);
        [self.cellWidthCache setObject:cachedWidth forKey:indexPath];
    }
    
    return CGSizeMake(cachedWidth.floatValue, 33);
    

    我知道自调整大小功能和estimatedSize,我的问题是是否可以为高度设置估计大小,但为宽度设置静态大小。你知道这是否可能吗?是的,这是可能的。我正在做同样的事情,只是在我的应用程序中有一个灵活的宽度。您只需将约束设置为静态宽度,并使高度约束具有灵活性,例如通过指定“>=”或“我知道自调整大小功能和estimatedSize,我的问题是我是否可以为高度设置估计大小,但为宽度设置静态大小。你知道这是否可能吗?是的,这是可能的。我正在做同样的事情,只是在我的应用程序中有一个灵活的宽度。您只需将约束设置为静态宽度,并使高度约束具有灵活性,例如通过指定“>=”或“我知道自调整大小功能和estimatedSize,我的问题是我是否可以为高度设置估计大小,但为宽度设置静态大小。你知道这是否可能吗?是的,这是可能的。我正在做同样的事情,只是在我的应用程序中有一个灵活的宽度。您只需将约束设置为静态宽度,并使高度约束灵活,例如,通过指定“>=”或“我知道自调整大小功能和estimatedSize,我的问题是我是否可以设置高度的估计大小,但设置静态尺寸