如何在没有额外空间的情况下更改SwiftUI选取器视图大小?

如何在没有额外空间的情况下更改SwiftUI选取器视图大小?,swiftui,Swiftui,我是SwftUI新手,尝试从SwftUI实现Piker视图 我有一个简单的选择器,里面有一些元素可以显示。我将一个只有50的帧设置为,添加了边框并应用了视图修改器.clipped()。这里是代码: import SwiftUI struct ContentView: View { var body: some View { VStack { Picker(selection: .constant(1), label: Text("")

我是SwftUI新手,尝试从SwftUI实现Piker视图

我有一个简单的选择器,里面有一些元素可以显示。我将一个只有50的帧设置为,添加了边框并应用了视图修改器.clipped()。这里是代码:

import SwiftUI

struct ContentView: View {
var body: some View {
        VStack {
            Picker(selection: .constant(1), label: Text("")) {
                Text("1").tag(1)
                Text("2").tag(2)
                Text("3").tag(3)
            }
            //.clipped()
            .labelsHidden()
            .frame(width: 50)
            .clipped()
        }
        .border(Color.red)
   }
}

一切看起来都很好。但是,当运行应用程序时,问题开始出现,在运行时只需打开调试视图层次结构,如果选择器宽度大得多,您将看到实际大小,我不知道为什么会发生这种情况。请,如果您知道如何修复它,我会经常显示它,谢谢尝试内容形状,它应该限制选择器命中测试仅限于剪裁区域,如

VStack { 
    Picker(selection: .constant(1), label: Text("")) { 
          Text("1").tag(1) 
          Text("2").tag(2) 
          Text("3").tag(3) 
     } //.clipped() 
     .labelsHidden()
     .frame(width: 50) 
     .clipped()
     .contentShape(Rectangle())   // << here !!
  }
VStack{
选择器(选择:。常量(1),标签:文本(“”){
文本(“1”)。标签(1)
文本(“2”)。标签(2)
文本(“3”)。标签(3)
}//.clipped()
.标签隐藏()
.框架(宽度:50)
.clipped()

.contentShape(矩形())//这回答了你的问题吗?实际上,为什么这对你来说是个问题,它是内部表示法?谢谢,但它在iOS 14和Xcode 12.3中不起作用。这对我来说是个问题,因为当我将它与其他UI元素组合在一起时,它会阻止与其他UI的交互谢谢你的帮助,它就像一个符咒一样工作)我实际上y不知道在SwiftUI中我们可以定义交互视图区域,这很酷