有啥方法可以避免 SwiftUI GeometryReader 阻止嵌套视图在列表中增长?
Posted
技术标签:
【中文标题】有啥方法可以避免 SwiftUI GeometryReader 阻止嵌套视图在列表中增长?【英文标题】:Any way to avoid SwiftUI GeometryReader preventing nested view to grow inside List?有什么方法可以避免 SwiftUI GeometryReader 阻止嵌套视图在列表中增长? 【发布时间】:2019-08-20 01:05:46 【问题描述】:出于某种原因,将GeometryReader
作为中介,如果它是List
“单元格”,则会杀死其嵌套视图的几何形状。
示例代码:
struct SampleView: View
var multilineText: some View
Text(
"""
Some
Amazing
Multiline
Copy
"""
)
var body: some View
List(1...5, id: \.self) _ in
GeometryReader _ in
self.multilineText
没有GeometryReader
(预期)/实际有GeometryReader
:
显然,此示例过于简单,但有正当理由为我正在构建的嵌套视图测量几何图形。
这是在 Xcode 11 beta 6 上发布的。我应该直接将其报告为错误,还是可以预期且可行?
【问题讨论】:
我不知道这是否是一个错误,但我知道GeometryReader
在所有测试版中为原本大小不灵活的子视图增加了灵活性。如果您解释了您真正想要使用 GeometryReader
的目的,也许我们可以帮助您使其更好地为您服务。例如,如果您在overlay
或background
修饰符中使用GeometryReader
,GeometryReader
将无法影响修改后视图的布局,但会采用修改后视图的大小。
@robmayoff 我目前有一个十六进制视图,它在叠加层上使用GeometryReader
来计算单个等宽字符的大小,并根据视图的几何大小组成一组偶数列单个字符的。如果没有GeometryReader
,就无法构建它。但总的来说,让我感到困惑的是,作为某种观点的消费者,我可能甚至不知道它测量几何,把它放在List
中——然后繁荣,它坏了。对我来说听起来不太对。
看看this answer对你有没有帮助。
当我使用 this answer 在列表中嵌入多行 UILabel 时,我刚刚遇到了这个问题。
GeometryReader
改变了嵌套项的行为对我来说似乎很奇怪。由于GeometryReader
实际读取了包含它的容器,因此我很幸运地将其设置为Group
内的空兄弟。 GeometryReader
在 ZStack
内部似乎特别奇怪
【参考方案1】:
为列表添加最小行高。
List(1...5, id: \.self) _ in
GeometryReader _ in
self.multilineText
.environment(\.defaultMinListRowHeight, 100)
【讨论】:
以上是关于有啥方法可以避免 SwiftUI GeometryReader 阻止嵌套视图在列表中增长?的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以在 SwiftUI 中使用 @ViewBuilder 创建/提取视图数组
有啥方法可以判断哪个状态更改导致在 SwiftUI 中重建视图?
有啥方法可以在 SwiftUI 中的可搜索导航修饰符上关闭自动更正/设置键盘类型
SwiftUI 有啥方法可以创建一个 TabView 来显示 Tab Item 下面的 View
在 UIKit 中我们可以设置 label.numberOfLines = 0 当我们不知道文本将占用多少行时?在 SwiftUI 中有啥替代方法? [复制]