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

Posted

技术标签:

【中文标题】如何在没有额外空间的情况下更改 SwiftUI Picker 视图大小?【英文标题】:How to change SwiftUI Picker view size with no additional space? 【发布时间】:2021-01-08 14:06:48 【问题描述】:

我是 SwiftUI 新手,正在尝试从 SwftUI 实现 Piker 视图。

我有一个简单的 Picker,其中包含一些要显示的元素。我将一个框架设置为仅 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)
   

一切看起来都不错。但是,当运行应用程序时开始出现问题,并且在运行时只需打开 Debug View Hierarchy,如果 Picker 宽度更大,您会看到实际大小> 我不知道为什么会这样。拜托,如果你知道如何解决它,我会经常出现,谢谢你????

【问题讨论】:

这是否回答了您的问题***.com/questions/63497649/…?实际上为什么这对你来说是个问题,它是内部表示? 谢谢,但它不适用于 ios 14 和 Xcode 12.3。这对我来说是个问题,因为当我将它与其他 UI 元素结合使用时,它会阻止与其他 UI 的交互 【参考方案1】:

尝试使用内容形状,它应该将选择器命中测试限制在剪切区域,例如

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 !!
  

【讨论】:

非常感谢您的帮助,它就像一个魅力)我实际上不知道在 SwiftUI 中我们可以定义视图的交互区域,非常酷?

以上是关于如何在没有额外空间的情况下更改 SwiftUI Picker 视图大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用额外空间的情况下检查双向链表是不是为回文?

顶部细节视图中不会消失的额外空间 (SwiftUI)

如何在 SwiftUI 中更改 modal 或 sheet 的大小?

如何在没有导航回溯的情况下启动 SwiftUI 视图?

如何在没有测试目标的情况下让 SwiftUI Preview 只构建主要目标?

如何在不中断删除的情况下在 SwiftUI 中实现 TextField 列表