日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)IOS教程:創(chuàng)建高性能的可滾動Stack

概覽

你的 App 需要在容器視圖中顯示的數(shù)據(jù)經(jīng)常會超過設備屏幕上容許的空間。對于重復視圖或視圖組,水平 Stack 和垂直 Stack 是很好的解決方案,但它們沒有內(nèi)建的滾動機制。你可以通過將 Stack 包裝在 ScrollView (英文) 中來添加滾動,并在出現(xiàn)性能問題時切換到惰性 Stack。

臨海網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)公司。

在可滾動的容器中顯示視圖組

實施重復視圖或視圖組很簡單,只需將它們包裝在 ScrollView (英文) 內(nèi)的 HStack (英文) 或 VStack (英文) 中即可。

 ScrollView(.horizontal) {  HStack {  ProfileView()  ProfileView()  ProfileView()  ProfileView()  ProfileView()  } } .frame(maxWidth: 500)

如果上述示例代碼中的 ProfileView 具有 200 x 200 點的固有內(nèi)容大小,則 frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:) (英文) 視圖修飾符將 500 點的最大寬度應用于 ScrollView (英文) 會導致 Stack 在其內(nèi)部滾動。

有關如何使用 Stack 將視圖組合在一起的介紹,請參閱“使用 Stack 視圖構(gòu)建布局”。

為你的數(shù)據(jù)創(chuàng)建重復視圖

使用 ForEach (英文) 來為你 App 中的數(shù)據(jù)創(chuàng)建重復視圖。從 profiles 數(shù)組中的一個個人資料數(shù)據(jù)列表中,在 HStack (英文) 內(nèi)使用 ForEach (英文) 為數(shù)組中的每個元素創(chuàng)建一個 ProfileView。

 ScrollView(.horizontal) {  HStack {  ForEach(profiles) { profile in  ProfileView(profile: profile)  }  } } .frame(maxWidth: 500)

注釋

當你使用 ForEach (英文) 時,你迭代的每個元素必須經(jīng)過唯一標識??梢允乖刈駨?Identifiable (英文) 協(xié)議,或者將一個鍵路徑傳遞到唯一的標識符作為 init(_:id:content:) (英文) 的 id 參數(shù)。

考慮對大量視圖使用惰性堆疊

HStack (英文)、VStack (英文) 和 ZStack (英文) 三個標準 Stack 視圖在顯示時都會載入它們的所含視圖層次結(jié)構(gòu),而一次性載入大量視圖會導致運行時性能變慢。

在以上示例中,ProfileView 是一個包含嵌套 Stack 視圖、文本標簽和圖像視圖的復合視圖。一次性載入大量個人資料會導致明顯的速度變慢。

隨著 Stack 中的視圖數(shù)量增加,請考慮使用 LazyHStack (英文) 和 LazyVStack (英文) 代替 HStack (英文) 和 VStack (英文)。惰性 Stack 按需載入和渲染子視圖,從而在載入大量子視圖時可提供顯著的性能提升。

Stack 視圖和惰性 Stack 具有相似的功能,可能給人感覺它們能夠互換,但是,它們在不同情況下有各自的優(yōu)勢。Stack 視圖會一次性載入所有子視圖,布局性能快且可靠,因為系統(tǒng)在載入每個子視圖時就知道它們的大小和形狀。惰性 Stack 會為了性能而損失一定程度的布局正確性,原因是系統(tǒng)僅在子視圖可見時才會計算它們的幾何結(jié)構(gòu)。

在選擇要使用的 Stack 視圖類型時,始終先選擇標準 Stack 視圖,并且僅在對代碼進行性能分析后證明值得提升性能時才切換到惰性 Stack。

進行性能分析以發(fā)現(xiàn)性能問題

考慮要使用哪種 Stack 時,請使用 Instruments 工具對你的 App進行性能分析,以確定用戶界面代碼中將有大量視圖載入 Stack 的區(qū)域。

若要對 SwiftUI 視圖載入進行性能分析,請打開 Instruments 工具,方法是在 Xcode“Product”(產(chǎn)品) 菜單中選擇“Profile”(性能分析),然后選取 SwiftUI 性能分析模板。該模板將載入四個 instrument:View Body、View Properties、Core Animation Commits 和 Time Profiler。這些 instrument 的組合為你尋找加快 App 性能的機會提供了一個不錯的起點。

注釋

切勿使用 iOS 模擬器對你的代碼進行性能分析。請始終使用真實設備進行性能測試。

對上述代碼進行性能分析時,View Body instrument 顯示 1,000 個 ProfileView 實例同時作為 HStack (英文) 載入內(nèi)存。隨著系統(tǒng)載入每個個人資料,你還會看到相同數(shù)量的 Image (英文) 視圖載入。

在此情況下,解決方案是將 HStack (英文) 替換為 LazyHStack (英文),如以下代碼所示:

 ScrollView(.horizontal) {  LazyHStack {  ForEach(profiles) { profile in  ProfileView(profile: profile)  }  } } .frame(maxWidth: 500)

運行另一次跟蹤會顯示最初載入的視圖數(shù)量急劇下降,因為只有四個啟動的 ProfileView 實例可見。你還可以在“Total Duration”(總時間長度) 列中看到相應的下降。

有關使用 Instruments 工具的更多信息,請參閱提升 App 的性能。


當前標題:創(chuàng)新互聯(lián)IOS教程:創(chuàng)建高性能的可滾動Stack
鏈接URL:http://www.5511xx.com/article/cohjpjg.html