作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试自行调整尺寸 UICollectionViewCells
使用自动布局,但我似乎无法让单元格根据内容调整大小。我无法理解如何从单元格的 contentView 中的内容更新单元格的大小。
这是我尝试过的设置:
UICollectionViewCell
与 UITextView
在其内容 View 中。 UITextView
被禁用。 UITextView
固定在单元格的左侧,显式宽度为 320。UITextView
固定在单元格的顶部。 UITextView
将高度约束设置为 UITextView
的常量报告将适合文本。 UITextView
的样子。背景设置为蓝色:
最佳答案
This answer is outdated from iOS 14 with the addition of compositional layouts. Please consider updating the new API
preferredLayoutAttributesFittingAttributes
重命名为
preferredLayoutAttributesFitting
并使用自动调整大小
systemLayoutSizeFittingSize
重命名为
systemLayoutSizeFitting
estimatedItemSize
上设置
UICollectionViewFlowLayout
设置
estimatedItemSize
属性后,流布局本质上将变为动态的。
self.flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
#2。添加对您的单元格子类大小的支持
preferredLayoutAttributesFittingAttributes
。
awakeFromNib
)。
preferredLayoutAttributesFittingAttributes
调用此函数时,您的 View 已经配置了内容(即已调用
cellForItem
)。假设您的约束已适当设置,您可以有这样的实现:
//forces the system to do one layout pass
var isHeightCalculated: Bool = false
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
//Exhibit A - We need to cache our calculation to prevent a crash.
if !isHeightCalculated {
setNeedsLayout()
layoutIfNeeded()
let size = contentView.systemLayoutSizeFitting(layoutAttributes.size)
var newFrame = layoutAttributes.frame
newFrame.size.width = CGFloat(ceilf(Float(size.width)))
layoutAttributes.frame = newFrame
isHeightCalculated = true
}
return layoutAttributes
}
注意 在 iOS 9 上,行为发生了一些变化,如果您不小心,可能会导致您的实现崩溃(请参阅更多
here)。当您实现
preferredLayoutAttributesFittingAttributes
时,您需要确保您只更改布局属性的框架一次。如果您不这样做,布局将无限期地调用您的实现并最终崩溃。一种解决方案是在您的单元格中缓存计算出的大小,并在您重复使用单元格或更改其内容时使其无效,就像我对
isHeightCalculated
属性所做的那样。
UITableView
赢得了动态大小恕我直言的战斗。
Undefined
。这只会在 iOS 8 及更高版本上被打破,因为在 iOS 7 上,将根据设备(iPad = Regular-Any,iPhone = Compact-Any)加载尺寸类。您可以设置estimatedItemSize 而不加载XIB,或者您可以从XIB 加载单元格,将其添加到collectionView(这将设置traitCollection),执行布局,然后将其从superview 中删除。或者,您也可以让您的单元格覆盖
traitCollection
getter 并返回适当的特征。由你决定。
关于ios - UICollectionView 具有自动布局的自定尺寸单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25895311/
我正在实现谱聚类算法,我必须确保矩阵(拉普拉斯矩阵)是半正定矩阵。 检查矩阵是否为正定矩阵 (PD) 就足够了,因为可以在特征值中看到“半”部分。矩阵非常大(nxn,其中 n 是几千的数量级)所以特征
我是一名优秀的程序员,十分优秀!