Mekal Z

Mekal Z

A programmer running out of the wall.
twitter

如何使用SwiftUI在iOS 16中將圖像設置為NavigationBar的背景

image

要求#

在我的新應用程式 LinguaTale 中,我想要為一個列表視圖設置一個自定義標題,該列表視圖是 NavigationView 的子視圖。在這個標題中,我想要在屏幕頂部設置一個圖像,忽略安全區域。最終效果如下所示。
image

實現#

  1. 使用.toolbarBackground(.hidden, for: .navigationBar)隱藏 navigationBar 的默認背景。
  2. 使用overlay修飾符設置 HeaderView。
  3. 使用.background修飾符將圖像背景設置為 HeaderView。
  4. 您可以在圖像背景修飾符之前使用.background(.ultraThinMaterial.opacity(0.8))使圖像稍微模糊,這樣圖像上的文本看起來更清晰。
  5. 在背景圖像上使用.edgesIgnoringSafeArea(.top),使其可以覆蓋到屏幕頂部。
  6. 在 ScrollView 中設置HeaderView().opacity(0),並確保它是 ScrollView 中的第一個視圖。這個不可見的視圖用於佔據與 HeaderView 在 overlay 中相同的空間,這樣 ScrollView 中的真正第一個元素就不會被 HeaderView 覆蓋。
import SwiftUI

struct DemoView: View {
    var body: some View {
        VStack {
            ScrollView {
                HeaderView()
                    .opacity(0) // 這個不可見的視圖用於佔據空間
            }
        }
        .toolbarBackground(.hidden, for: .navigationBar)
        .overlay(alignment: .top) {
            HeaderView()
                .background(.ultraThinMaterial.opacity(0.8))
                .background {
                    Image("TheBackgroundImage")
                        .resizable(resizingMode: .stretch)
                        .edgesIgnoringSafeArea(.top)
                }
        }
    }
}

struct HeaderView: View {
    var body: some View {
        Text("這是一個演示標題視圖")
    }
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。