【问题标题】:SwiftUI View gets offset to the right when using Geometry Reader and ScrollVIew使用 Geometry Reader 和 ScrollVIew 时,SwiftUI 视图向右偏移
【发布时间】:2020-09-24 11:25:33
【问题描述】:

我在 SwiftUI 中的 GeometryReader 内使用 ScrollView,但滚动视图内的所有内容都向左偏移,或者至少滚动视图内的项目认为视图的边界远远超出了实际边界风景。如下所示。我正在使用来自 mac 应用商店的 Xcode 12 公开版本以及 macOS Big Sur beta 8。

这是重新创建它的代码。

struct TextClassifierMMLView: View {
    @State var nLayers = 5
    var body: some View {
        GeometryReader{ geo in
            ScrollView{
                VStack{
                    GrayNumberStepperCard(text: "Layers", geo: geo, upperRange: 1000, lowerRange: 1, value: self.$nLayers).padding()
                }
            }
        }.navigationTitle(Text("Text Classifier"))
    }
}


struct GrayNumberStepperCard: View {
    @State var text: String
    @State var geo: GeometryProxy
    @State var upperRange: Int
    @State var lowerRange: Int
    @Binding var value: Int
    
    var body: some View {
        HStack{
            Text(text)
                .font(.custom("OpenSans-SemiBold", size: 14))
                .foregroundColor(.accentColor)
            
            Spacer()
            
            Stepper(value: $value, in: lowerRange...upperRange) {
                Text("\(self.value)")
            }.padding()
        }.frame(width: geo.size.width, height: 15)
        .padding()
        .background(
            RoundedRectangle(cornerRadius: 4)
                .foregroundColor(Color(hex: "F0F5F5"))
        )
        .padding(.horizontal)
        .padding(.vertical, 5)
    }
}

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    在这个布局中你根本不需要GeometryReader,它只会混淆自动布局。

    这里是修改后的代码。使用 Xcode 12 / iOS 14 测试

    struct TextClassifierMMLView: View {
        @State var nLayers = 5
        var body: some View {
                ScrollView{
                     VStack{
                          GrayNumberStepperCard(text: "Layers", upperRange: 1000, lowerRange: 1, value: self.$nLayers).padding()
                     }
            }.navigationTitle(Text("Text Classifier"))
        }
    }
    
    
    struct GrayNumberStepperCard: View {
        @State var text: String
        @State var upperRange: Int
        @State var lowerRange: Int
        @Binding var value: Int
    
        var body: some View {
            HStack{
                Text(text)
                    .font(.custom("OpenSans-SemiBold", size: 14))
                    .foregroundColor(.accentColor)
    
                Spacer()
    
                Stepper(value: $value, in: lowerRange...upperRange) {
                    Text("\(self.value)")
                }.padding()
            }.frame(height: 15)
            .padding()
            .background(
                RoundedRectangle(cornerRadius: 4)
                    .foregroundColor(Color.red)
            )
            .padding(.horizontal)
            .padding(.vertical, 5)
        }
    }
    

    【讨论】:

    • 谢谢!您认为偏移是某种 Xcode / SwiftUI 错误还是我的代码很糟糕?
    • 这不是一个好的答案,因为您可能希望使用 GeometryReader 包装视图,以提供用于传达有关坐标空间的维度的代理 - 例如检测是否发生滚动并执行 segues 或滚动视图中 UI 元素上的动画。
    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多