添加自定义的Liquid Glass导航视图,像App Store Connect应用那样吗?

移动开发 2026-07-10

我想在导航栏中添加看起来像芯片的按钮,使用SwiftUI。Apple的 App Store Connect应用就有这个功能:

enter image description here

我尝试用以下代码来实现:

struct ContentView: View {
    var body: some View {
        NavigationStack {
            List {
                ForEach(0..<100) { index in
                    Text("Content")
                }
            }
            .navigationTitle("Demo")
            .navigationBarTitleDisplayMode(.inline)
            .safeAreaInset(edge: .top) {
                ScrollView(.horizontal) {
                    HStack {
                        ForEach(0..<5) { index in
                            Text("Text \(index)")
                                .padding()
                                .glassEffect()
                        }
                    }
                    .padding(.horizontal)
                }
            }
        }
    }
}

但效果并不如预期:

enter image description here

  • 芯片的背景颜色有点奇怪
  • 向上滚动列表时,它在导航条下方逐渐淡出,但芯片没有被计入其中

有没有办法实现与Apple的 Connect应用相同的效果?

解决方案

关于第一点:

芯片的背景颜色有点奇怪

背景是你使用 .regular 玻璃效果得到的半透明效果,这是默认设置。使用这种玻璃还会有阴影效果。

要让项更透明,可以改用 .clear 玻璃。清晰玻璃也没有阴影效果。如果你打算为这些项添加点击手势,可能也希望让玻璃具备交互性:

.glassEffect(.clear.interactive())

关于第二点:

向上滚动列表时,它在导航条下方淡出,但芯片没有被计入其中

如果你想让淡出效果从你那玻璃质感的项后面开始,只需把 .safeAreaInset 改成 .safeAreaBar。文档里有一个相关讨论:

safeAreaInset(edge:alignment:spacing:content:) 修饰符类似,内容视图锚定在父视图的指定水平边缘,其宽度对安全区域进行内边距。

此外,它还会扩展受内嵌安全区域影响的滚动视图的边缘效果。

.safeAreaBar(edge: .top) {
    ScrollView(.horizontal) {
        // ...
    }
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章