我有一个包含多个文本框、图片和标签的集合视图单元格。数据动态添加,可以有较短或更长的标签和图片,使每个单元格的集合视图具有不同的高度和宽度。我想通过编程测量我的集合视图单元格的宽度和高度来做多件事情,其中还包括根据我的单元格的宽度和高度根据不同的方向设置列数。你知道如何测量一个宽度和高度吗?布局是绘制在主故事板,没有任何额外的xib。我将非常感谢你的回应
发布于 2022-01-28 09:54:48
使用AutoLayout设置UI.And集合视图布局如下所示:
let layout = UICollectionViewFlowLayout()
layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize你不需要测量细胞的大小,系统会做所有的事情。
如果您想自己测量,最好缓存单元格的大小以获得更好的性能。
发布于 2022-02-07 14:44:24
一般来说,你不应该知道你的观点的维度(有时,但很少)。例如,我编写了一个视图,它模仿Apple HealthKit的移动/锻炼/站立环的行为和外观,并对其进行扩展,以便它可以显示任意数量的戒指,并显示最内环的百分比值(例如"80%"),或者,如果您愿意,可以使用闭包将另一个子视图包含在最内部的环中。所有这些,我不需要知道视图的尺寸。
真正的诀窍是让你的思想颠倒一点。尝试将配置推入视图,并使您的视图具有适应性。
你提到了对齐是很有挑战性的;是的,但是一旦你真正掌握了它的诀窍,它就是强大的。我推荐这个关于如何最好地利用对齐指南的参考,这是一个很好的解释:https://swiftui-lab.com/alignment-guides/
但是,如果所有这些都失败了,并且您绝对决心使用视图的维度,那么请看一看GeometryReader
GeometryReader { geometry in
HStack(spacing: 0) {
Text("Left")
.font(.largeTitle)
.foregroundColor(.black)
.frame(width: geometry.size.width * 0.33)
.background(Color.yellow)
Text("Right")
.font(.largeTitle)
.foregroundColor(.black)
.frame(width: geometry.size.width * 0.67)
.background(Color.orange)
}
}
.frame(height: 50)请查看使用Swift进行的黑客活动,以获得更深入的解释:https://www.hackingwithswift.com/quick-start/swiftui/how-to-provide-relative-sizes-using-geometryreader
不过,对GeometryReader要小心。请考虑在.background()或.overlay()中使用它,以避免更改视图。GeometryReader创建了一个填充所有可用空间的视图,以便计算视图的维度。这实际上会影响你视图的布局。但如果你把它放在一个覆盖,你可以避免问题。使用它往往是更多的工作,而不仅仅是弄清楚如何做布局,而不需要知道尺寸。这就是SwiftUI设计的工作原理。
https://stackoverflow.com/questions/70891575
复制相似问题