Ios SwiftUI中的一排拾取轮,为什么拖动滚动区域会偏离屏幕上的拾取控件?

Ios SwiftUI中的一排拾取轮,为什么拖动滚动区域会偏离屏幕上的拾取控件?,ios,swiftui,picker,Ios,Swiftui,Picker,我正在开发一个SwiftUI视图,其目的是允许用户输入美元金额。我想要一排七轮式选择器,每个选择器的值都是数字0到9 下面的代码可以工作,除了当我试图触摸并拖动一个数字列以在其中滚动时,我发现我的拖动手势不会导致我正在触摸的选择器滚动,而是导致选择器向右滚动几列。换句话说,每个选择器的“拖动到滚动”区域都偏移了屏幕上选择器列本身的左侧 我试着给这些风景画上边界,但似乎一切都在正确的地方。你知道是什么原因造成的,或者如何修复吗 import SwiftUI struct CurrencyPick

我正在开发一个SwiftUI视图,其目的是允许用户输入美元金额。我想要一排七轮式选择器,每个选择器的值都是数字0到9

下面的代码可以工作,除了当我试图触摸并拖动一个数字列以在其中滚动时,我发现我的拖动手势不会导致我正在触摸的选择器滚动,而是导致选择器向右滚动几列。换句话说,每个选择器的“拖动到滚动”区域都偏移了屏幕上选择器列本身的左侧

我试着给这些风景画上边界,但似乎一切都在正确的地方。你知道是什么原因造成的,或者如何修复吗

import SwiftUI

struct CurrencyPickerView: View {

    @State private var centsDigit: Int = 0
    @State private var tenCentsDigit: Int = 0
    @State private var onesDigit: Int = 0
    @State private var tensDigit: Int = 0
    @State private var hundredsDigit: Int = 0
    @State private var thousandsDigit: Int = 0
    @State private var tenThousandsDigit: Int = 0

    var body: some View {
        let pickerWidth = CGFloat(20)
        return HStack {
            Picker(selection: $tenThousandsDigit, label: EmptyView()) {
                ForEach((0...9), id: \.self) { ix in
                    Text("\(ix)").tag(ix)
                }
            }.frame(width: pickerWidth)

            Picker(selection: $thousandsDigit, label: EmptyView()) {
                ForEach((0...9), id: \.self) { ix in
                    Text("\(ix)").tag(ix)
                }
            }.frame(width: pickerWidth)

            Picker(selection: $hundredsDigit, label: EmptyView()) {
                ForEach((0...9), id: \.self) { ix in
                    Text("\(ix)").tag(ix)
                }
            }.frame(width: pickerWidth)

            Picker(selection: $tensDigit, label: EmptyView()) {
                ForEach((0...9), id: \.self) { ix in
                    Text("\(ix)").tag(ix)
                }
            }.frame(width: pickerWidth)

            Picker(selection: $onesDigit, label: EmptyView()) {
                ForEach((0...9), id: \.self) { ix in
                    Text("\(ix)").tag(ix)
                }
            }.frame(width: pickerWidth)

            Text(".")

            Picker(selection: $tenCentsDigit, label: EmptyView()) {
                ForEach((0...9), id: \.self) { ix in
                    Text("\(ix)").tag(ix)
                }
            }.frame(width: pickerWidth)

            Picker(selection: $centsDigit, label: EmptyView()) {
                ForEach((0...9), id: \.self) { ix in
                    Text("\(ix)").tag(ix)
                }
            }.frame(width: pickerWidth)

        }
    }
}

.clipped()
应用于每个
.frame(…)
解决了问题。据推测,这些拾取轮的触摸区域出现在框架区域之外(用于布局,但并不固有地将内容约束到框架边界),并且以导致奇怪偏移效果的方式重叠。使用
.clipped()
可以防止SwiftUI在框架外显示/激活内容,现在拾取轮可以正常工作。

为此浪费了2个小时-谢谢。你应该标出正确的答案