我正在尝试在使用swiftUI构建的ios上支持RTL模式 这样做可以很好地改变布局方向:
.environment(\.layoutDirection, .rightToLeft)
仅在水平ScrollView上无法正常工作
当我这样做时:
ScrollView(.horizontal) {
HStack{
Text("b1")
Text("b2")
Text("b3")
}
} .environment(\.layoutDirection, .rightToLeft)
物品的位置将旋转,但HSTACK将始终保持在左侧,如以下屏幕截图所示:
任何解决方案或破解方法正确无误?
答案 0 :(得分:0)
作为骇客,您可以从以下内容开始:
var body: some View {
GeometryReader { geom in
ScrollView(.horizontal) {
HStack {
Text("b1")
Text("b2")
Text("b3")
}.environment(\.layoutDirection, .rightToLeft)
.padding(.leading, geom.size.width - 100) // adjust for the number of items
}
}
}
答案 1 :(得分:0)
我发现有一种使用.flipsForRightToLeftLayoutDirection(true)
和.rotation3DEffect
的技巧
就像滚动视图将被翻转一样,您无需将HStack的每个项目翻转到.rotation3DEffect
ScrollView(.horizontal) {
HStack{
Text("b1")
.rotation3DEffect(Angle(degrees: 180), axis: (x: CGFloat(0), y: CGFloat(10), z: CGFloat(0)))
Text("b2")
.rotation3DEffect(Angle(degrees: 180), axis: (x: CGFloat(0), y: CGFloat(10), z: CGFloat(0)))
Text("b3")
.rotation3DEffect(Angle(degrees: 180), axis: (x: CGFloat(0), y: CGFloat(10), z: CGFloat(0)))
}
}.flipsForRightToLeftLayoutDirection(true)
.environment(\.layoutDirection, .rightToLeft)