- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我之前的问题( Get width of a view using in SwiftUI )的扩展
我需要实现一个布局,其中每行的项目数是根据它们的组合宽度动态确定的(基本上,将项目排成一行,直到它们不再适合为止)。
有人告诉我,使用 GeometryReader 是一种用声明性语言做某事的hacky 方式,这显然是正确的。
我也被定向到这个类似 CollectionView 的组件 https://github.com/Q-Mobile/QGrid但该解决方案是静态的,因为在呈现任何组件之前,行数和每行单元格的数量是一次性确定的。
我不知道如何解决这个问题,所以任何建议对我来说都非常有值(value)!
❤️❤️❤️
最佳答案
TL; 博士
GeometryReader 可能是一个“hacky”解决方案,但它是我们目前拥有的解决方案。可以创建一个动态回流少量项目或延迟大量项目的解决方案。 My demo code 在这里会很笨拙,但听起来描述我的方法可能有用。
使用我们所拥有的
在幕后,SwiftUI 正在执行各种优化的约束求解以有效地布局您的 View 。从理论上讲,像您描述的那样回流内容可能是解决约束的一部分;在今天的 SwiftUI 中,事实并非如此。因此,执行您所描述的操作的唯一方法是以下某些变体:
[String]
数组开始,并将其转换为一个
[[String]]
数组,其中每个内部数组对应于一条线,在我的 View 中可以水平放置。 (从技术上讲,它以
String
开头,在空白处拆分以形成
[String]
,但从广义上讲,我有一个要拆分为多行的集合。)然后我可以使用
VStack
、
HStack
进行布局
ForEach
。
[String]
数组而不是派生的
[[String]]
数组,因此它永远不会进入递归循环。您可能认为将每个 View 放置两次(一次用于测量宽度,一次用于显示)是低效的,但我发现它比尝试从显示的 View 中测量宽度要快几十倍,并产生 100% 的正确结果时间。
+---------- FIRST TRY - CYCLIC ----------+ +-------- SECOND TRY - ACYCLIC --------+
| | | |
| +--------+ [String] +----------+ | | +-------+ [String] +--------+ |
| | | | | | | |
| | +--------------------------+ | | | v v |
| | | | | | | Hidden +--> Widths +--> [[String]] |
| v v + v | | layout | |
| Display +--> Widths +--> [[String]] | | v |
| layout | | Display |
| | | layout |
+----------------------------------------+ +--------------------------------------+
[String]
数组回流到
[[String]]
。
关于ios - 根据SwiftUI中的宽度计算每行的项目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57595009/
driver.get("https://www.yahoo.com/"); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS)
原始 DataFrame 只有 1 列元组。我想添加一列,其中包含每个元组中的项目数(长度)。 ITEMS 0 (EGG, WATER, TOMATOE) 1 (MILK
我有一个包含这些部分的 ListView。当有一个部分时,它就会取代另一个部分。也就是说,如果 ListView 项目计数为 30,则该部分将取代第一段,结果显示只有 29 点。 这里有一张图,很清楚
这个问题在这里已经有了答案: parsing nested parentheses in python, grab content by level (4 个答案) 关闭 4 年前。 我想提取与 a
我决定使用 Gwan 的 KV 存储来代替 Redis NoSQL 数据库。我在手册中看到,kv 支持文件 IO 的持久标志,以在重新启动之间保留我猜的数据。它使用回调recfn,但是这个函数究竟如何
我现在正在学习 swift。我在我的 swift 代码中使用了 ANetworking (Obj C 中的库)。我已经成功返回解析后的 JSON。但是我想找到返回的 json 项目的数量。这是我到目前
我正在重复这样的 JSON 对象(嵌套)项目列表: {{specific}} 我想在页面顶部的每个项目对象中显示“特定”项目的数量(在 ng-repeat 范围之外)。我无
我目前有 8 个 UITabBar 项目,所有这些项目都可以在“更多” View 中进行编辑。我的问题是,允许的标签栏项目的绝对最大数量是多少? 我理解5是一次最多可见的;我正在寻找您能拥有的最长月经
如果我在 DynamoDB 中扫描或查询,则可以设置 Limit属性(property)。 DynamoDB documentation说如下: The maximum number of items
我想知道的是我们如何在 Angular js 中获取项目的 ng-repeat 计数。从下面的代码中,我想获得技能的数量,因为我想对其进行限制。如果 skill count > 5 将 skill 限
我在日志中收到此异常 - java.lang.IndexOutOfBoundsException: Invalid item position 0(0). Item count:0
我是一名优秀的程序员,十分优秀!