SwiftUI 文本在 HStack 中超出屏幕
SwiftUI Text going out of screen in HStack
除了 .lineLimit(nil), .fixedSize(horizontal: true, vertical: false), .fixedSize(horizontal: false, vertical: true) 我什么都试过了,我不知道怎么办如果文本超出屏幕范围,则将文本放在下一行。文本是按钮,按钮在列表中。
func showTime(hm: HourAndMinute) -> some View{
return HStack {
Text(String(hm.hour)).bold()
ForEach(hm.minute, id: \.self) { minute in
Button(action: {
print(hm.minute)
}) {
Text(String(minute)).frame(width: 30, height: 25).background(Color("hour")).cornerRadius(5)
}.buttonStyle(BorderlessButtonStyle())
}
}.fixedSize(horizontal: true, vertical: false)
}
如果你不想错过任何一个框,你可以尝试使用 ScrollView。
ScrollView(.horizontal) {
HStack {
Text(String(hm.hour)).bold()
ForEach(hm.minute, id: \.self) { minute in
Button(action: {
print(hm.minute)
}) {
Text(String(perc))
.frame(width: 30, height: 25)
.background(Color("ora")).cornerRadius(5)
}.buttonStyle(BorderlessButtonStyle())
}
}
}
另一方面,如果您想剪裁容器视图,您可以使用:
.clipShape(Rectangle())
我找到了答案:LazyVGrid
获取屏幕宽度:
let singleWidth:CGFloat = UIScreen.main.bounds.width
GridItemLayout:
var gridItemLayout = Array(repeating: GridItem(.fixed(30), spacing: 10), count: Int(singleWidth/50))
和return LazyVGrid (columns: gridItemLayout, spacing: 10) {
最终解:
let singleWidth:CGFloat = UIScreen.main.bounds.width
func showTime(hm: HourAndMinute) -> some View{
var gridItemLayout = Array(repeating: GridItem(.fixed(30), spacing: 10), count: Int(singleWidth/50))
return LazyVGrid (columns: gridItemLayout, spacing: 10) {
Text(String(hm.hour)).bold()
ForEach(hm.minute, id: \.self) { minute in
Button(action: {
print(hm.minute)
}) {
Text(String(minute)).frame(width: 30, height: 25).background(Color("hour")).cornerRadius(5)
}.buttonStyle(BorderlessButtonStyle())
}
}
}
除了 .lineLimit(nil), .fixedSize(horizontal: true, vertical: false), .fixedSize(horizontal: false, vertical: true) 我什么都试过了,我不知道怎么办如果文本超出屏幕范围,则将文本放在下一行。文本是按钮,按钮在列表中。
func showTime(hm: HourAndMinute) -> some View{
return HStack {
Text(String(hm.hour)).bold()
ForEach(hm.minute, id: \.self) { minute in
Button(action: {
print(hm.minute)
}) {
Text(String(minute)).frame(width: 30, height: 25).background(Color("hour")).cornerRadius(5)
}.buttonStyle(BorderlessButtonStyle())
}
}.fixedSize(horizontal: true, vertical: false)
}
如果你不想错过任何一个框,你可以尝试使用 ScrollView。
ScrollView(.horizontal) {
HStack {
Text(String(hm.hour)).bold()
ForEach(hm.minute, id: \.self) { minute in
Button(action: {
print(hm.minute)
}) {
Text(String(perc))
.frame(width: 30, height: 25)
.background(Color("ora")).cornerRadius(5)
}.buttonStyle(BorderlessButtonStyle())
}
}
}
另一方面,如果您想剪裁容器视图,您可以使用:
.clipShape(Rectangle())
我找到了答案:LazyVGrid
获取屏幕宽度:
let singleWidth:CGFloat = UIScreen.main.bounds.width
GridItemLayout:
var gridItemLayout = Array(repeating: GridItem(.fixed(30), spacing: 10), count: Int(singleWidth/50))
和return LazyVGrid (columns: gridItemLayout, spacing: 10) {
最终解:
let singleWidth:CGFloat = UIScreen.main.bounds.width
func showTime(hm: HourAndMinute) -> some View{
var gridItemLayout = Array(repeating: GridItem(.fixed(30), spacing: 10), count: Int(singleWidth/50))
return LazyVGrid (columns: gridItemLayout, spacing: 10) {
Text(String(hm.hour)).bold()
ForEach(hm.minute, id: \.self) { minute in
Button(action: {
print(hm.minute)
}) {
Text(String(minute)).frame(width: 30, height: 25).background(Color("hour")).cornerRadius(5)
}.buttonStyle(BorderlessButtonStyle())
}
}
}