新聞中心
概覽
LazyHStack (英文) 和 LazyVStack (英文) 視圖都可以顯示整理為多個邏輯部分的視圖組,從而分別將其子項排列成水平生長和垂直生長的直線。之所以稱這些 stack 為“惰性”,是因為 stack 視圖僅在需要在屏幕上渲染項目時才會創(chuàng)建項目。與 stack 視圖一樣,惰性 stack 不包括對滾動的任何固有支持,并且你應(yīng)將惰性 stack 視圖包裝在 ScrollView (英文) 容器中。

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計,商水網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:商水等地區(qū)。商水做網(wǎng)站價格咨詢:18980820575
若要對惰性 stack 視圖中的內(nèi)容或數(shù)據(jù)進(jìn)行分組,請使用 Section (英文) 實例作為已分組視圖集合的容器。Section (英文) 視圖本身沒有任何直觀的表示形式,但是可以包含頁眉和頁腳視圖,這些視圖可隨著 stack 的內(nèi)容進(jìn)行滾動,或者你可以將它們固定在 ScrollView (英文) 的頂部或底部。
注釋
使用 Section (英文) 視圖可以在 stack 視圖或惰性 grid、List (英文)、CommandMenu (英文)、Form (英文) 和多個其他容器類型中獲得平臺適用的分組。
本文中的代碼示例構(gòu)建了一個用戶界面來直觀地呈現(xiàn)三原色的不同色度。Stack 中的每個部分都代表一種原色,其中包含五個子視圖,每個子視圖都顯示該顏色的一個不同變體。
準(zhǔn)備數(shù)據(jù)
與 stack 中包含的視圖一樣,在通過 ForEach (英文) 迭代時,每個 Section (英文) 都必須經(jīng)過唯一標(biāo)識。在此示例中,ColorData 實例代表各個部分,ShadeData 實例代表一個部分中每種顏色的色度。ColorData 和 ShadeData 均遵從 Identifiable (英文) 協(xié)議。
struct ColorData: Identifiable { let id = UUID() let name: String let color: Color let variations: [ShadeData] struct ShadeData: Identifiable { let id = UUID() var brightness: Double } init(color: Color, name: String) { self.name = name self.color = color self.variations = stride(from: 0.0, to: 0.5, by: 0.1) .map { ShadeData(brightness: $0) } } }
顯示帶頁眉和頁腳的部分
下面的 ColorSelectionView 為每個原色設(shè)置了一個包含 ColorData 實例的數(shù)組。LazyVStack (英文) 迭代顏色數(shù)據(jù)的數(shù)組以創(chuàng)建各個部分,然后迭代 variations 以根據(jù)色度創(chuàng)建視圖。
struct ColorSelectionView: View { let sections = [ ColorData(color: .red, name: "Reds"), ColorData(color: .green, name: "Greens"), ColorData(color: .blue, name: "Blues") ] var body: some View { ScrollView { LazyVStack(spacing: 1) { ForEach(sections) { section in Section(header: SectionHeaderView(colorData: section)) { ForEach(section.variations) { variation in section.color .brightness(variation.brightness) .frame(height: 20) } } } } } } }
使用 Section (英文) 視圖對數(shù)據(jù)進(jìn)行分組,并使用 header 和 footer 屬性傳入頁眉或頁腳視圖。此示例實施了一個 SectionHeaderView 作為頁眉視圖,其中包含一個半透明的 stack 視圖以及 Text (英文) 標(biāo)簽中該部分顏色的名稱。
struct SectionHeaderView: View { var colorData: ColorData var body: some View { HStack { Text(colorData.name) .font(.headline) .foregroundColor(colorData.color) Spacer() } .padding() .background(Color.primary .colorInvert() .opacity(0.75)) } }
有關(guān)使用 ForEach (英文) 在 stack 中重復(fù)視圖的更多信息,請參閱“創(chuàng)建高性能的可滾動 Stack”。
使重要信息保持可見
默認(rèn)情況下,一個部分的頁眉和頁腳視圖將與該部分的內(nèi)容同步滾動。如果你想要讓頁眉和頁腳視圖始終保持可見 (無論相關(guān)部分的頂部或底部是否可見),可以為惰性 stack 視圖的 pinnedViews 屬性指定一組 PinnedScrollableViews (英文)。
LazyVStack(spacing: 1, pinnedViews: [.sectionHeaders]) { // ... }
在 LazyVStack (英文) 容器中,頁眉附加到頂部,頁腳附加到底部。在 LazyHStack (英文) 容器中,頁眉附加到前緣,頁腳附加到后緣。
通過此更改,在用戶開始滾動時,相關(guān)部分的頁眉會固定到視圖頂部。
本文名稱:創(chuàng)新互聯(lián)IOS教程:使用惰性Stack視圖對數(shù)據(jù)進(jìn)行分組
分享路徑:http://www.dlmjj.cn/article/cddochg.html


咨詢
建站咨詢
