【发布时间】:2021-05-12 13:28:51
【问题描述】:
ScrollView 中的多行文本有一个相当特殊的问题。我在 ScrollView 中有一个 LazyVStack 并在此堆栈中有 SomeRow(见下文)视图。
我在这个 SomeRow 视图中有一个很长的多行描述,SwiftUI 总是会中断。
我已经尝试了所有here 的解决方案,但它们要么破坏了布局,要么不起作用,要么直接导致应用崩溃。
我尝试将复制代码减少到最低限度,但不幸的是它仍然很长,因为我想保留我想要完成的外观。
这里是 SomeListView:
import SwiftUI
struct SomeListView: View {
var body: some View {
VStack{
Text("Title")
.font(.title)
ScrollView{
LazyVStack{
ForEach(0..<4){_ in
SomeRow(entries: EntryContainer(entries:
[
Entry("DESC\nLONG DESCRIPTION WITH OVERFLOW"),
Entry("")
]
))
Spacer().frame(height: 5)
Divider()
}
}
}.padding(16)
}
}
}
struct SomeListView_Previews: PreviewProvider {
static var previews: some View {
SomeListView()
}
}
SomeRow 视图
import SwiftUI
struct SomeRow: View {
var entries: [Entry]
var body: some View {
VStack(alignment: .leading, spacing: 0){
Text("title").frame(maxWidth: .infinity, alignment: .leading)
Spacer().frame(height: 5)
ForEach(entries){entry in
HStack{
VStack{
Text("00:00 - 00:00")
Spacer()
}.frame(minWidth: 110)
Divider()
VStack{
HStack{
Text("titleinner")
Spacer()
}
HStack{
Text(entry.description ?? "")
Spacer()
VStack{
Spacer()
Text("number")
}
}
Spacer()
}
Spacer()
}
}
}
}
}
struct SomeRow_Previews: PreviewProvider {
static var previews: some View {
SomeRow(entries:
[
Entry("DESC\nLONG DESCRIPTION WITH OVERFLOW"),
Entry("")
]
)
}
}
入口数据类
import Foundation
class Entry: Identifiable {
let description: String?
init(_ description: String? = nil) {
self.description = description
}
}
任何解决方法的想法?我假设这只是 SwiftUI 错误,因为如果您为两个条目设置相同的长描述,它会神奇地完全显示两个描述,这对我来说真的没有意义。
当我使用Text(entry.description ?? "").fixedSize(horizontal: false, vertical: true 时,它是这样中断的:
(分隔线不再填满整个高度,左列中的时间戳对齐错误)
【问题讨论】:
-
您尝试将
.fixedSize(horizontal: false, vertical: true)放在哪里?您可能需要将其添加到几个不同的元素中才能获得所需的布局。 -
我尝试将它添加到 Text(entry.description ?? "")
-
我添加了一个屏幕截图,当我使用 fixedSize 时它的外观。感谢您抽出宝贵时间发表评论:)
-
我不认为你可以有一个单独的分隔线,你想要完成的事情。但是,我可以向您展示不影响对齐的代码,但它将使用两条分隔线,如您的屏幕截图所示。