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

SwiftUI同视图混用.refreshable()与.searchable()引发刷新卡顿

SwiftUI中.refreshable()与.searchable()共存导致下拉刷新卡顿的解决方案

问题现象

在同一个SwiftUI视图中同时使用.refreshable()与.searchable()修饰符时,下拉刷新会出现视图抖动卡顿;移除.searchable()后,刷新动画恢复正常。

原因分析

这是由于.searchable()被附加在NavigationStack外层,下拉刷新的动作会触发整个导航栈相关视图的重新计算与重绘,额外的视图更新开销导致了卡顿。

解决方案

将.searchable()修饰符移动到NavigationStack内部,缩小视图更新的范围,避免不必要的层级重绘。

修改后的代码示例

import SwiftUI

struct TestView: View {
    
    @State private var text: String = ""
    let listings: [String] = ["Hello world", "Hello StackOverflow"]
    
    var body: some View {
        NavigationStack {
            VStack {
                List {
                    ForEach(listings, id: \.self) { item in
                        Text(item)
                    }
                }
                .refreshable {}
                .navigationTitle("Listings")
            }
            .searchable(text: $text) // 将searchable移到NavigationStack内部
        }
        .task {}
    }
}

#Preview {
    TestView()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:14:58