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

如何禁用SwiftUI中ToolbarItem滚动时的默认高亮效果?

如何禁用SwiftUI ToolbarItem滚动时的高亮效果?

默认情况下,当List等内容滚动到SwiftUI的ToolbarItem后方时,该ToolbarItem会自动高亮。请问是否可以禁用这一高亮效果?例如Signal应用中的ToolbarItem始终保持不变,带有精致的薄材质效果,是使用了自定义工具栏还是可修改系统默认设置?

滚动前未高亮状态:
滚动前未高亮的ToolbarItem

滚动时高亮状态:
滚动时高亮的ToolbarItem

相关代码示例:

.navigationBarTitle("Element", displayMode: .inline)
.toolbar {
    ToolbarItem(placement: .navigationBarTrailing) {
        Menu {
            Button(action: { selectedFilter = .all }) {
                Label("Show All", systemImage: "line.3.horizontal")
            }
        }
    }
}

解决方案

要禁用ToolbarItem滚动时的高亮效果,有两种实用实现方式:

  1. 配置全局导航栏外观
    通过修改UINavigationBar的外观设置,强制保持统一的背景样式,覆盖系统默认的动态变化逻辑:
init() {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithTransparentBackground()
    // 设置薄材质背景,匹配Signal的视觉效果
    appearance.backgroundEffect = UIBlurEffect(style: .systemUltraThinMaterial)
    // 同步标准状态和滚动边缘状态的样式
    UINavigationBar.appearance().standardAppearance = appearance
    UINavigationBar.appearance().scrollEdgeAppearance = appearance
}

将这段代码添加到你的View初始化方法中,导航栏(包含ToolbarItem)在滚动时就不会切换高亮样式了。

  1. 自定义工具栏容器
    如果不想修改全局导航栏样式,可以用ZStack手动实现固定样式的工具栏,完全脱离系统Toolbar的默认行为:
ZStack(alignment: .top) {
    List {
        // 你的列表内容
    }
    .navigationBarHidden(true) // 隐藏系统默认导航栏
    
    // 自定义固定样式工具栏
    VStack {
        HStack {
            Text("Element")
                .font(.headline)
            Spacer()
            Menu {
                Button(action: { selectedFilter = .all }) {
                    Label("Show All", systemImage: "line.3.horizontal")
                }
            } label: {
                Image(systemName: "ellipsis.circle")
                    .foregroundColor(.primary)
            }
        }
        .padding(.horizontal)
        .padding(.vertical, 8)
        .background(.ultraThinMaterial)
        Spacer()
    }
}

这种方式自由度更高,能完全复刻Signal的工具栏视觉效果。

说明

Signal应用大概率采用的是配置全局导航栏外观的方案,既保留了系统Toolbar的原生交互逻辑,又通过UINavigationBarAppearance固定了视觉样式,实现滚动时无高亮变化的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:32:38