SwiftUI ScrollView水平RTL无法正常工作

时间:2020-04-12 03:19:43

标签: uiscrollview swiftui right-to-left hstack

我正在尝试在使用swiftUI构建的ios上支持RTL模式 这样做可以很好地改变布局方向:

.environment(\.layoutDirection, .rightToLeft)

仅在水平ScrollView上无法正常工作

当我这样做时:

 ScrollView(.horizontal) {
            HStack{
                Text("b1")
                Text("b2")
                Text("b3")
            }
        } .environment(\.layoutDirection, .rightToLeft)

物品的位置将旋转,但HSTACK将始终保持在左侧,如以下屏幕截图所示: enter image description here

任何解决方案或破解方法正确无误?

2 个答案:

答案 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)