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

如何实现iOS工具栏无系统颜色变化的透明模糊效果?

解决iOS工具栏空内容纯黑/滚动时模糊的实现问题

你的问题出在同时给backgroundEffect和backgroundColor赋值,且未区分standardAppearance和scrollEdgeAppearance的适用场景——原生消息应用的效果正是靠这两个Appearance分别控制两种状态实现的:

  • 无内容在工具栏后方时:使用scrollEdgeAppearance,纯实色背景(无模糊)
  • 有内容滚动到工具栏后方时:使用standardAppearance,仅保留模糊效果

修正后的实现代码如下:

// 1. 配置「无内容时」的工具栏样式(scrollEdgeAppearance)
let scrollEdgeAppearance = UIToolbarAppearance()
scrollEdgeAppearance.backgroundColor = UIColor(dynamicProvider: { traitCollection in
    return traitCollection.userInterfaceStyle == .dark ? .black : .white
})
scrollEdgeAppearance.backgroundEffect = nil // 关闭模糊,使用纯实色
scrollEdgeAppearance.shadowColor = .clear

// 2. 配置「有内容滚动时」的工具栏样式(standardAppearance)
let standardAppearance = UIToolbarAppearance()
standardAppearance.backgroundEffect = UIBlurEffect(style: .systemUltraThinMaterial)
standardAppearance.backgroundColor = .clear // 移除半透明底色,让模糊效果完全展示
standardAppearance.shadowColor = .clear

// 3. 分别赋值给全局Toolbar外观
UIToolbar.appearance().standardAppearance = standardAppearance
UIToolbar.appearance().scrollEdgeAppearance = scrollEdgeAppearance

关键说明:

  • scrollEdgeAppearance:当工具栏处于视图边界(无内容在后方)时生效,直接使用纯黑/纯白,关闭模糊效果,和原生消息应用的空状态完全匹配。
  • standardAppearance:当有内容滚动到工具栏下方时生效,仅保留systemUltraThinMaterial的模糊效果,底色设为透明,避免半透明颜色覆盖模糊层,让后方内容的模糊效果自然呈现。
  • 动态颜色适配:通过dynamicProvider自动适配深浅色模式,无需额外写分支判断。

这样设置后,就能实现和iOS原生消息、Messenger、Signal一致的工具栏效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:04:52