![](/img/trans.png)
[英]App interace layout direction returning left-to-right for right-to-left language
[英]How ScrollView Layout Direction to right-to-left in SwiftUI?
我們如何在 swiftUI 的 Horizontal ScrollView 中設置從右到左的布局方向?
像這樣的東西:
ScrollView(showsHorizontalIndicator: false) {
HStack {
VStack {
Image("1")
Text("one")
}
VStack {
Image("2")
Text("two")
}
VStack {
Image("3")
Text("three")
}
}
}
所以當模擬器運行時,我想在右側看到Image("1")
並向右滑動以訪問Image("3")
您可以通過在修改器下方提供您的view
來制作您想要從右到左的任何view
:
.flipsForRightToLeftLayoutDirection(true)
.environment(\.layoutDirection, .rightToLeft)
在你的情況下,它會是這樣的:
ScrollView(showsHorizontalIndicator: false) {
HStack {
VStack {
Image("1")
Text("one")
}
VStack {
Image("2")
Text("two")
}
VStack {
Image("3")
Text("three")
}
}
}
.flipsForRightToLeftLayoutDirection(true)
.environment(\.layoutDirection, .rightToLeft)
好運達達什 ;)
你也可以使用我的助手。
import SwiftUI
struct ScrollViewRTL<Content: View>: View {
@ViewBuilder var content: Content
@Environment(\.layoutDirection) private var layoutDirection
var type: RowType
init(type: RowType, @ViewBuilder content: () -> Content) {
self.type = type
self.content = content()
}
@ViewBuilder var body: some View {
ScrollView(type.scrollAxis, showsIndicators: false) {
content
.rotation3DEffect(Angle(degrees: layoutDirection == .rightToLeft ? -180 : 0), axis: (
x: CGFloat(0),
y: CGFloat(layoutDirection == .rightToLeft ? -10 : 0),
z: CGFloat(0)))
}
.rotation3DEffect(Angle(degrees: layoutDirection == .rightToLeft ? 180 : 0), axis: (
x: CGFloat(0),
y: CGFloat(layoutDirection == .rightToLeft ? 10 : 0),
z: CGFloat(0)))
}
}
public enum RowType {
case hList
case vList
var scrollAxis: Axis.Set {
switch self {
case .hList:
return .horizontal
case .vList:
return .vertical
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.