当前位置: 首页 > 面试题库 >

自动调整单元格大小:单元格宽度等于CollectionView

斜向文
2023-03-14
问题内容

我正在将AutoSizing单元格与Autolayout和UICollectionView一起使用。

我可以在单元初始化的代码中指定约束:

  func configureCell() {
    snp.makeConstraints { (make) in
      make.width.equalToSuperview()
    }
  }

但是,由于该单元尚未添加到中,该应用程序崩溃了collectionView

问题

  1. 在该阶段cell的生命周期,可以添加一个约束cellwidth

  2. 有没有作出任何默认方式cell`宽度equal to the of the的CollectionViewwithout accessing an instance of UIScreenorUIWindow

编辑 这个问题不是重复的,因为它不是关于如何使用AutoSizing单元格功能,而是关于在单元生命周期的哪个阶段应用约束以
使用AutoLayout 获得所需结果的问题。


问题答案:

要实现自动调整大小的集合视图单元,您需要做两件事:

  1. 指定estimatedItemSizeUICollectionViewFlowLayout
  2. preferredLayoutAttributesFitting(_:)在您的手机上实施

1.指定estimatedItemSize有关UICollectionViewFlowLayout

此属性的默认值为CGSizeZero。将其设置为任何其他值会使集合视图使用单元格的preferredLayoutAttributesFitting(_
:)方法查询每个单元格的实际大小。如果所有单元格的高度都相同,请使用itemSize属性(而不是此属性)来指定单元格大小。

只是一个估算值 ,用于计算滚动视图的内容大小,并将其设置为合理的值。

let collectionViewFlowLayout = UICollectionViewFlowLayout()
collectionViewFlowLayout.estimatedItemSize = CGSize(width: collectionView.frame.width, height: 100)

2. preferredLayoutAttributesFitting(_:)UICollectionViewCell子类上实现

override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
    let autoLayoutAttributes = super.preferredLayoutAttributesFitting(layoutAttributes)

    // Specify you want _full width_
    let targetSize = CGSize(width: layoutAttributes.frame.width, height: 0)

    // Calculate the size (height) using Auto Layout
    let autoLayoutSize = contentView.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: UILayoutPriority.required, verticalFittingPriority: UILayoutPriority.defaultLow)
    let autoLayoutFrame = CGRect(origin: autoLayoutAttributes.frame.origin, size: autoLayoutSize)

    // Assign the new size to the layout attributes
    autoLayoutAttributes.frame = autoLayoutFrame
    return autoLayoutAttributes
}


 类似资料:
  • 我正在使用带有Autolayout和UICollectionView的自动调整单元格。 我可以在单元初始化代码中指定约束: 但是,应用会崩溃,因为单元格尚未添加到。 问题 > 在生命周期的哪个阶段,可以添加具有 的< code>width集合视图< code >的widthUIScreenUIWindow '的实例吗? 编辑问题不是重复的,因为它不是关于如何使用自动调整单元格大小功能,而是关于在使

  • 我在tableViewController中使用自动大小的表格视图单元格。我已将下面的两行添加到viewDidLoad(),执行正确的自动布局,并将带有扩展文本的标签的Lines属性更改为0。 但是,当视图第一次加载时,单元格不会自动调整大小。但是如果我向下滚动或者翻转到横向视图,然后再翻转回来,自动调整大小就能完美地工作。所以我添加了下面的代码来查看WillAppear函数: 现在,当table

  • 问题内容: 我在表容器中有不确定数量的表单元元素。 有没有一种纯粹的CSS方法可以使表格单元具有相等的宽度,即使它们内部具有不同大小的内容? 谢谢。 编辑:具有最大宽度将需要知道您有多少个单元格? 问题答案: 这是工作单元数不确定的有效 您可以为每个父对象固定一个宽度( 表格 ),否则通常将为100%。 诀窍是使用 每个单元上的一定宽度触发它,这里是2%。这将触发 另一个 表算法,浏览器会尽力遵守

  • 我在UIViewController中有一个UITableView作为视图的一部分。我正在尝试根据文本的长度自动调整表格单元格的大小。它不会设置textview的文本,单元格将以idCellTextView单元格的标准高度结束。我已经四处搜索过,正在尝试从单元格内的文本视图相对于内容视图和代码在自动布局中使用固定,如下所示: 与问题相关的视图控制器的其余部分显示在以下位置:

  • 问题内容: 有没有一种使用HTML / CSS(具有相对大小)的方法来使一行单元格拉伸包含它的表的整个宽度? 单元格的宽度应相等,并且外部表格的大小也应使用来动态变化。 目前,如果我没有指定固定大小,单元格会自动调整大小以适合其内容。 问题答案: 您甚至不必为单元格设置特定的宽度,足以均匀地分布单元格。 请注意,要使用表格样式的元素,必须设置宽度(在我的示例中为100%)。

  • 问题内容: 在我的应用程序中,我有一个表格视图,每个单元格中都有一个图像,标签和文本视图。我希望能够根据文本视图中的内容量自动调整单元格的大小。(文本视图是最下面的文本。) 到目前为止,我已经添加了正确的约束。文本视图的前导,尾随,顶部和底部,并且已禁用滚动和编辑。 在我的tableViewController.swift文件中,我编写了以下代码: 但是,这不起作用,因为当我在文本视图中添加更多文