【问题标题】:SwiftUI ScrollView horizontal RTL not working correctlySwiftUI ScrollView 水平 RTL 无法正常工作
【发布时间】:2020-07-24 17:52:45
【问题描述】:

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

.environment(\.layoutDirection, .rightToLeft)

只有水平的 ScrollView 不能正常工作

当我这样做时:

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

项目位置会旋转,但 HSTACK 将始终保持在左侧,如下面的屏幕截图:

有什么解决方案或技巧可以使它正确吗?

【问题讨论】:

    标签: uiscrollview swiftui right-to-left hstack


    【解决方案1】:

    作为一个黑客,你可以从这个开始:

    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
            }
        }
    }
    

    【讨论】:

    • 这样,因为有填充,它不会向左滚动
    【解决方案2】:

    我找到了一个使用.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)
    

    【讨论】:

    • 它有效,但我认为必须有更好的方法来做到这一点
    • 我认为 .flipsForRightToLeftLayoutDirection(true) 这将单独工作。不?.. 它解决了我的问题
    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多