SwiftUI ScrollView горизонтальный RTL не работает правильно - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь поддерживать режим RTL на моем ios, который был построен с использованием swiftUI, и все в порядке, когда это делается для изменения направления слоя:

.environment(\.layoutDirection, .rightToLeft)

Только с горизонтальным ScrollView, это не так работать правильно

, когда я делаю это:

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

Позиции позиций будут вращаться, но HSTACK будет всегда оставаться слева, как на скриншоте ниже: enter image description here

Любое решение или взломать, чтобы сделать это справа?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я нашел хак, чтобы сделать это, используя .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)
0 голосов
/ 12 апреля 2020

как хак, вы можете начать с этого:

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