我正在尝试在我的 ios 上支持 RTL 模式,该模式是使用 swiftUI 构建的,在执行此操作以更改布局方向时一切都很好:
.environment(\.layoutDirection, .rightToLeft)
Run Code Online (Sandbox Code Playgroud)
仅使用水平 ScrollView ,它无法正常工作
当我这样做时:
ScrollView(.horizontal) {
HStack{
Text("b1")
Text("b2")
Text("b3")
}
} .environment(\.layoutDirection, .rightToLeft)
Run Code Online (Sandbox Code Playgroud)
项目位置将旋转,但 HSTACK 将始终保持在左侧,如下面的屏幕截图所示:
有什么解决方案或技巧可以使其向右吗?
我有一个内容视图,其中使用 ForEach 显示项目列表
@ObservedObject var homeVM : HomeViewModel
var body: some View {
ScrollView (.horizontal, showsIndicators: false) {
HStack(spacing: 10) {
Spacer().frame(width:8)
ForEach(homeVM.favoriteStores , id: \._id){ item in
StoreRowOneView(storeVM: item)
}
Spacer().frame(width:8)
}
}.frame(height: 100)
}
Run Code Online (Sandbox Code Playgroud)
而我的ObservableObject包含
@Published var favoriteStores = [StoreViewModel]()
并StoreViewModel定义如下
class StoreViewModel : ObservableObject {
@Published var store:ItemStore
init(store:ItemStore) {
self.store = store
}
var _id:String {
return store._id!
}
}
Run Code Online (Sandbox Code Playgroud)
如果我直接填充数组,它工作正常,我可以看到商店列表,但如果我在网络调用(后台作业)后填充数组,则视图没有收到更改通知
StoreApi().getFavedStores(userId: userId) { (response) in
guard response != nil else { …Run Code Online (Sandbox Code Playgroud)