由于List
目前似乎无法配置为删除行分隔符,因此我使用的ScrollView
中带有VStack
来创建垂直布局文字元素。下面的示例:
ScrollView {
VStack {
// ...
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer mattis ullamcorper tortor, nec finibus sapien imperdiet non. Duis tristique eros eget ex consectetur laoreet.")
.lineLimit(0)
}.frame(width: UIScreen.main.bounds.width)
}
生成的Text
被截断为单行。在ScrollView
之外,它呈现为多行。除了明确设置ScrollView
框架的高度之外,如何在Text
内实现此目标?
答案 0 :(得分:5)
在 Xcode Beta 3 中:
如果您在滚动视图中嵌套的堆栈中有一个Text
视图,请使用frame(idealHeight: .infinity)
解决方法:
ScrollView {
VStack {
Text(someString)
.lineLimit(nil)
.frame(idealHeight: .infinity)
}
}
如果有多个多行文字,请从以后的视图中删除.frame
:
如果堆栈中有多个Text
元素,并且将frame(idealHeight: .infinity)
应用于多个元素,则会在StackLayout.Header.init(layoutContext:proxies:majorAxis:minorAxisAlignment:uniformSpacing:childStorage:capacity:)
处发现SwiftUI的堆栈布局代码崩溃。 / p>
要解决此问题,请仅将idealHeight
应用于第一个Text
视图。至少在Beta 3中,这具有后来包装Text
视图的副作用。
ScrollView {
VStack {
Text(someString)
.lineLimit(nil)
.frame(idealHeight: .infinity) // Only to the first!
Text(anotherLongString)
.lineLimit(nil)
}
}
如果堆栈中的内容是动态的,请使用以下技巧:
在顶部带有Text("")
的单个空白frame(idealHeight: .infinity)
视图将产生使后面的Text节点换行的副作用。
ScrollView {
VStack {
// Place a single empty / "" at the top of your stack.
// It will consume no vertical space.
Text("")
.lineLimit(nil)
.frame(idealHeight: .infinity)
ForEach(someArray) { someString in
// Omit the `idealHeight: .infinity` trick from
// all the later Text views.
Text(someString)
.lineLimit(nil)
}
}
}
注意:
如果堆栈中有.frame(idealHeight: .infinity)
,则Spacer()
不起作用。
以下内容将崩溃:
ScrollView {
VStack {
Text(someString)
.lineLimit(nil)
.frame(idealHeight: .infinity)
Spacer()
}
}
...,除了:
*** Terminating app due to uncaught exception 'CALayerInvalidGeometry',
reason: 'CALayer position contains NaN: [nan nan].
答案 1 :(得分:4)
您可以强制视图填充其理想大小,例如在垂直ScrollView中:
ScrollView {
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer mattis ullamcorper tortor, nec finibus sapien imperdiet non. Duis tristique eros eget ex consectetur laoreet.")
.fixedSize(horizontal: false, vertical: true)
}
对我来说,比修改框架好一点。
答案 2 :(得分:2)
以下对我来说适用于 Beta 3 -无间隔,无宽度限制,灵活的高度限制?:
ScrollView {
VStack {
Text(longText)
.lineLimit(nil)
.font(.largeTitle)
.frame(idealHeight: .infinity)
}
}
答案 3 :(得分:1)
SwiftUI中似乎有错误。现在,您必须为VStack容器指定高度
ScrollView {
VStack {
// ...
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer mattis ullamcorper tortor, nec finibus sapien imperdiet non. Duis tristique eros eget ex consectetur laoreet.")
.lineLimit(nil)
}.frame(width: UIScreen.main.bounds.width, height: 500)
}
答案 4 :(得分:0)
正确的解决方案是确保为您的堆栈设置对齐方式:
jq 'reduce inputs[] as $rec (INDEX(.reference);
.[$rec.reference | tostring].details += [$rec]
) | map(.)' es_file1.json es_file2.json
VStack(alignment: .leading)
这样您就不需要 ScrollView {
VStack(alignment: .leading) {
// ...
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer mattis ullamcorper tortor, nec finibus sapien imperdiet non. Duis tristique eros eget ex consectetur laoreet.")
.lineLimit(0)
}.frame(width: UIScreen.main.bounds.width)
}
,因为布局已正确定义。