是否有可能完全显示蓝色标签(当前被截断)然后自动换行?
NavigationLink(destination: GameListView()) {
VStack(alignment: .leading, spacing: 5){
// Name der Sammlung:
Text(collection.name)
.font(.headline)
// Optional: Für welche Konsolen bzw. Plattformen:
HStack(alignment: .top, spacing: 10){
ForEach(collection.platforms, id: \.self) { platform in
Text(platform)
.padding(.all, 5)
.font(.caption)
.background(Color.blue)
.foregroundColor(Color.white)
.cornerRadius(5)
.lineLimit(1)
}
}
}
.padding(.vertical, 10)
}
Run Code Online (Sandbox Code Playgroud)
此外,蓝色标签中不应有换行符:
这就是它最终的样子:
是否可以使用 LazyVGrid 或 LazyHGrid 来获得这样的视图?
文本值在框中呈现,如果右边框附近没有更多空间,则从下一行开始。
我尝试过使用 LazyGrids 但似乎因为我需要给出最小列宽
LazyVGrid(columns: [
GridItem(.adaptive(minimum: 60)),
],
Run Code Online (Sandbox Code Playgroud)
文本被截断。有什么办法可以使用网格来完成上图中的视图吗?
我正在尝试在 SwiftUI 中实现一个标签列表,但是如果列表水平溢出,我不确定如何让它将标签包装到其他行。我从一个名为 tags 的字符串数组开始,然后在 SwiftUI 中循环遍历该数组并创建按钮,如下所示:
HStack{
ForEach(tags, id: \.self){tag in
Button(action: {}) {
HStack {
Text(tag)
Image(systemName: "xmark.circle")
}
}
.padding()
.foregroundColor(.white)
.background(Color.orange)
.cornerRadius(.infinity)
.lineLimit(1)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果数组有更多值,它会这样做:
我正在寻找的行为是将最后一个标签(黄色)包装到第二行。我意识到它在 HStack 中,我希望我可以添加对 lineLimit 的调用,其值大于 1,但它似乎没有改变行为。如果我将外部 HStack 更改为 VStack,它会将每个 Button 放在单独的行上,因此仍然不是我尝试创建的行为。任何指导将不胜感激。
如何使 Grid 项目宽度动态化,以便它采用文本的宽度?
使用下面的代码截断文本,考虑到可变文本长度,我希望所有文本都显示而不被截断。
struct ContentView: View {
let data = ["O Menino","The Boy", "The Girl", "A Menina","Mae","Mother"]
let layout = [
GridItem(.adaptive(minimum:50))
]
var body: some View {
ScrollView{
LazyVGrid(columns: layout, spacing: 20){
ForEach(data, id: \.self){ item in
VStack{
Text(item).lineLimit(1)
}.background(Color.red)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建一个垂直的字符串网格,这些字符串具有可变的长度,可以并排显示(例如社交媒体标签的集合),如下所示:
struct ContentView: View {
let data = ["first text",
"second text",
"long text for testing",
"short",
"some medium text"
]
let gridItem = GridItem(.adaptive(minimum: 40, maximum: 300))
var body: some View {
ScrollView {
LazyVGrid(columns: [gridItem]) {
ForEach(data, id:\.self) { item in
Text(item)
.lineLimit(1)
.background(Color.red)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但问题LazyVGrid是它与初始化程序中定义的最小项目宽度相关,这不允许它动态适应每个项目的宽度。
上述代码的结果是:
我的问题是:如何在 SwiftUI 的垂直滚动视图中显示任何可变长度字符串的动态列表?