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

SwiftUI的searchable修饰符未在导航栏标题下方默认显示搜索框

结论

这是iOS 15及更高版本的预期原生行为。
系统默认对导航栏附加的搜索栏采用自动隐藏策略:初始状态下搜索栏会收起到导航栏区域外,仅当用户向下滑动列表触发内容下拉时才会显示,以此默认给列表内容留出最大的展示空间。

实现默认显示搜索栏的方案

如果需要让搜索栏在页面加载时就默认展示,可以通过调整配置实现,可选方案如下:

  • 方案1:给导航栏添加标题,同时指定标题展示模式为inline,适配iOS 15及以上版本
    修改后的代码示例:
@State private var searchText = ""
let data = (1...50).map( {_ in Int.random(in: 1...10)} )

var body: some View {
    NavigationView {
        List {
            ForEach(data, id: \.self) { d in
                Text("\(d)")
            }
        }
        .navigationTitle("数据列表")
        .navigationBarTitleDisplayMode(.inline)
    }
    .searchable(text: $searchText)
}
  • 方案2:iOS 16+版本可以通过searchable的isPresented绑定参数主动控制搜索栏的展示状态,同时推荐使用NavigationStack替代已经废弃的NavigationView
    修改后的代码示例:
@State private var searchText = ""
@State private var showSearch = true // 初始化值设为true即可默认展示搜索栏
let data = (1...50).map( {_ in Int.random(in: 1...10)} )

var body: some View {
    NavigationStack {
        List {
            ForEach(data, id: \.self) { d in
                Text("\(d)")
            }
        }
        .navigationTitle("数据列表")
    }
    .searchable(isPresented: $showSearch, text: $searchText)
}

效果参考

  • 初始状态(默认隐藏搜索栏):滚动前效果图
  • 下拉列表后显示搜索栏:滚动后效果图

内容的提问来源于stack exchange,提问作者Petesta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:02