首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift - IOS :如何从布局中测量项目的高度和宽度

Swift - IOS :如何从布局中测量项目的高度和宽度
EN

Stack Overflow用户
提问于 2022-01-28 09:39:43
回答 2查看 472关注 0票数 1

我有一个包含多个文本框、图片和标签的集合视图单元格。数据动态添加,可以有较短或更长的标签和图片,使每个单元格的集合视图具有不同的高度和宽度。我想通过编程测量我的集合视图单元格的宽度和高度来做多件事情,其中还包括根据我的单元格的宽度和高度根据不同的方向设置列数。你知道如何测量一个宽度和高度吗?布局是绘制在主故事板,没有任何额外的xib。我将非常感谢你的回应

EN

回答 2

Stack Overflow用户

发布于 2022-01-28 09:54:48

使用AutoLayout设置UI.And集合视图布局如下所示:

代码语言:javascript
复制
let layout = UICollectionViewFlowLayout()
layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize

你不需要测量细胞的大小,系统会做所有的事情。

如果您想自己测量,最好缓存单元格的大小以获得更好的性能。

票数 1
EN

Stack Overflow用户

发布于 2022-02-07 14:44:24

一般来说,你不应该知道你的观点的维度(有时,但很少)。例如,我编写了一个视图,它模仿Apple HealthKit的移动/锻炼/站立环的行为和外观,并对其进行扩展,以便它可以显示任意数量的戒指,并显示最内环的百分比值(例如"80%"),或者,如果您愿意,可以使用闭包将另一个子视图包含在最内部的环中。所有这些,我不需要知道视图的尺寸。

真正的诀窍是让你的思想颠倒一点。尝试将配置推入视图,并使您的视图具有适应性。

你提到了对齐是很有挑战性的;是的,但是一旦你真正掌握了它的诀窍,它就是强大的。我推荐这个关于如何最好地利用对齐指南的参考,这是一个很好的解释:https://swiftui-lab.com/alignment-guides/

但是,如果所有这些都失败了,并且您绝对决心使用视图的维度,那么请看一看GeometryReader

代码语言:javascript
复制
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设计的工作原理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70891575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档