You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中在Form/List添加Picker时行高异常问题

SwiftUI List中Picker行高过高的解决方法

你的问题出在Picker在List中的默认样式上——在iOS 16及后续版本中,SwiftUI的Picker放在List/Form里时,默认使用NavigationLinkPickerStyle,这种样式会将Picker渲染成可跳转至选择页面的列表行,布局上会预留更多空间,导致行高超出预期。

要得到紧凑的行高效果,只需给Picker指定对应的样式即可,以下是两种常用方案:

方案一:使用菜单样式Picker

直接给Picker添加.pickerStyle(.menu)修饰符,这会将Picker转为下拉菜单样式,行高与普通List行保持一致:

import SwiftUI

struct ContentView: View {
    @State private var selectedOption: Int = 0
    
    var body: some View {
        List {
            Picker("Picker Row", selection: $selectedOption) {
                ForEach(0..<10) {
                    Text("\($0)")
                }
            }
            .pickerStyle(.menu)
        }
    }
}

方案二:自定义行布局(更灵活)

如果需要更精准的布局控制,可以用HStack包裹标签和无标题的Picker,配合隐藏标签:

import SwiftUI

struct ContentView: View {
    @State private var selectedOption: Int = 0
    
    var body: some View {
        List {
            HStack {
                Text("Picker Row")
                Spacer()
                Picker("", selection: $selectedOption) {
                    ForEach(0..<10) {
                        Text("\($0)")
                    }
                }
                .pickerStyle(.menu)
                .labelsHidden()
            }
        }
    }
}

两种方案都能让Picker行高匹配你预期的紧凑效果,你可以根据实际需求选择。

内容的提问来源于stack exchange,提问作者Yazeed AL-Zahrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:42:41