ios - UICollectionViewHeader - 计算复杂视图的大小
问题描述
我有一个 UICollectionReusableView,它有 2 个 UIView 作为子视图,它们本身有不同的视图(例如图像和标签)。这最能代表层次结构。
HeaderView(UICollectionReusableView)
|-- UIView
|-- Label
|-- UIButton
|-- UIButton
|--UIView
|-- UIImageView
|-- UIStackview
|-- UILabel
|-- UILabel
|-- UILabel
|-- UILabel
现在,我已经放弃了网络以解决这个问题。但我能找到的只是计算UILabel
高度。我真的需要知道我是如何计算的。我什至尝试引用标题referenceSizeForHeaderInSection
并调用layoutIfNeeded()
然后检查帧。但这似乎不起作用。
我真的很想对此进行解释以及如何实现这一目标的解决方案。
解决方案
您可以尝试计算 HeaderView 的大小
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
// if don't use xib file for HeaderView
let header = HeaderView()
// if use xib
let bundle = Bundle(for: HeaderView.self)
let nibName = String(describing: HeaderView.self)
let nib = bundle.loadNibNamed(nibName, owner: HeaderView.self, options: nil)
let header = nib?.first!
// just setup your header with needed data
header.setup(from: yourDataSource)
// set hear needed width
header.setup.frame.size.width = UIScreen.main.bounds.width
header.setNeedsLayout()
header.layoutIfNeeded()
let size = header.systemLayoutSizeFitting(header.frame.size)
return size
}
在标题设置方法中,您设置所有视图
func setup(from data: YourDataSource){
header.label1.text = data.name
header.label2.text = data.info
/// just setup all your field
....
}
推荐阅读
- optimization - 查询优化建议
- powershell - 如何将带有附加道具的 PSCustomObject 转换为自定义类
- activemq-artemis - 在 Artemis 共置 HA 配置中从从属故障恢复到主控不起作用
- mysql - 如何从终端访问和修改 phpmyadmin 数据库?
- python - 用于简单显示的最佳 Python UI 框架(无直接交互)
- ruby-on-rails - Rails Webpacker - 如何从视图 [HTML 文件] 访问 webpack 条目文件中定义的对象
- azure - 将 Azure SQL 弹性数据库克隆到不同资源组中的非弹性服务器
- json - 使用 HASH 作为 Snowflake 中的备用维度键?
- coldfusion - ColdFusion zip an entire folder
- ios - @Published 属性包装器及其 WrappedValue