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

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計(jì),商水網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:商水等地區(qū)。商水做網(wǎng)站價(jià)格咨詢:18980820575
若要對(duì)惰性 stack 視圖中的內(nèi)容或數(shù)據(jù)進(jìn)行分組,請(qǐng)使用 Section (英文) 實(shí)例作為已分組視圖集合的容器。Section (英文) 視圖本身沒有任何直觀的表示形式,但是可以包含頁眉和頁腳視圖,這些視圖可隨著 stack 的內(nèi)容進(jìn)行滾動(dòng),或者你可以將它們固定在 ScrollView (英文) 的頂部或底部。
注釋
使用 Section (英文) 視圖可以在 stack 視圖或惰性 grid、List (英文)、CommandMenu (英文)、Form (英文) 和多個(gè)其他容器類型中獲得平臺(tái)適用的分組。
本文中的代碼示例構(gòu)建了一個(gè)用戶界面來直觀地呈現(xiàn)三原色的不同色度。Stack 中的每個(gè)部分都代表一種原色,其中包含五個(gè)子視圖,每個(gè)子視圖都顯示該顏色的一個(gè)不同變體。
準(zhǔn)備數(shù)據(jù)
與 stack 中包含的視圖一樣,在通過 ForEach (英文) 迭代時(shí),每個(gè) Section (英文) 都必須經(jīng)過唯一標(biāo)識(shí)。在此示例中,ColorData 實(shí)例代表各個(gè)部分,ShadeData 實(shí)例代表一個(gè)部分中每種顏色的色度。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 為每個(gè)原色設(shè)置了一個(gè)包含 ColorData 實(shí)例的數(shù)組。LazyVStack (英文) 迭代顏色數(shù)據(jù)的數(shù)組以創(chuàng)建各個(gè)部分,然后迭代 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 (英文) 視圖對(duì)數(shù)據(jù)進(jìn)行分組,并使用 header 和 footer 屬性傳入頁眉或頁腳視圖。此示例實(shí)施了一個(gè) SectionHeaderView 作為頁眉視圖,其中包含一個(gè)半透明的 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ù)視圖的更多信息,請(qǐng)參閱“創(chuàng)建高性能的可滾動(dòng) Stack”。
使重要信息保持可見
默認(rèn)情況下,一個(gè)部分的頁眉和頁腳視圖將與該部分的內(nèi)容同步滾動(dòng)。如果你想要讓頁眉和頁腳視圖始終保持可見 (無論相關(guān)部分的頂部或底部是否可見),可以為惰性 stack 視圖的 pinnedViews 屬性指定一組 PinnedScrollableViews (英文)。
LazyVStack(spacing: 1, pinnedViews: [.sectionHeaders]) { // ... }
在 LazyVStack (英文) 容器中,頁眉附加到頂部,頁腳附加到底部。在 LazyHStack (英文) 容器中,頁眉附加到前緣,頁腳附加到后緣。
通過此更改,在用戶開始滾動(dòng)時(shí),相關(guān)部分的頁眉會(huì)固定到視圖頂部。
名稱欄目:創(chuàng)新互聯(lián)IOS教程:使用惰性Stack視圖對(duì)數(shù)據(jù)進(jìn)行分組
本文鏈接:http://www.5511xx.com/article/cddochg.html


咨詢
建站咨詢
