Swiftui 有没有办法有条件地翻转HStack的顺序';什么内容?
我正在使用Swiftui 有没有办法有条件地翻转HStack的顺序';什么内容?,swiftui,Swiftui,我正在使用HStack在视图层次结构中布局一些元素。我希望能够有条件地翻转元素的顺序 HStack{ 文本(“你好”) 文本(“世界”) } 这个想法是,根据视图的状态,它将被布局为“Hello World”或“World Hello” HStack本身不提供任何功能,但如果试图使用其他ViewBuilder、基于ForEach的方法等,试图将其从视图中移除似乎是不可能的 解决这个问题的唯一方法是完全指定两种布局,这是我试图避免的 let isfliped:Bool HStack{ 如果我翻了
HStack
在视图层次结构中布局一些元素。我希望能够有条件地翻转元素的顺序
HStack{
文本(“你好”)
文本(“世界”)
}
这个想法是,根据视图的状态,它将被布局为“Hello World”或“World Hello”
HStack
本身不提供任何功能,但如果试图使用其他ViewBuilder、基于ForEach的方法等,试图将其从视图中移除似乎是不可能的
解决这个问题的唯一方法是完全指定两种布局,这是我试图避免的
let isfliped:Bool
HStack{
如果我翻了{
文本(“世界”)
文本(“你好”)
}否则{
文本(“你好”)
文本(“世界”)
}
}
在使用ViewBuilder的基础上,这里有一种适用于任何容器中任何视图对的通用方法
使用Xcode 12进行测试
struct TestHStackFlip:View{
@状态私有变量翻转=false
var body:一些观点{
VStack{
HStack{
翻转组(如果:翻转){
文本(“文本1”)
文本(“文本2”)
}
}.animation(.default)//可设置动画
分隔器()
按钮(“翻转”){self.flipped.toggle()}
}
}
}
@视图生成器
func FlipGroup(如果值为Bool,
@ViewBuilder uContent:@escaping()->TupleView->一些视图{
让pair=content()
如果值{
TupleView((pair.value.1,pair.value.0))
}否则{
TupleView((pair.value.0,pair.value.1))
}
}
这是一个非常有趣的方法,谢谢分享!
struct TestHStackFlip: View {
@State private var flipped = false
var body: some View {
VStack {
HStack {
FlipGroup(if: flipped) {
Text("Text1")
Text("Text2")
}
}.animation(.default) // animatable
Divider()
Button("Flip") { self.flipped.toggle() }
}
}
}
@ViewBuilder
func FlipGroup<V1: View, V2: View>(if value: Bool,
@ViewBuilder _ content: @escaping () -> TupleView<(V1, V2)>) -> some View {
let pair = content()
if value {
TupleView((pair.value.1, pair.value.0))
} else {
TupleView((pair.value.0, pair.value.1))
}
}