Texture (二)

簡書內(nèi)容都是個人的知識點整理和筆記。

Texture布局

Texture的Layout API相較于復雜且增加開銷的Auto Layout其具有以下的有點:

  • 快捷:比Auto Layout 布局快速
  • 異步并發(fā):可以在后臺線程中對布局進行計算從而不影響交互
  • 規(guī)范:使用不可變數(shù)據(jù)結(jié)構(gòu)聲明布局
  • 可緩存
  • 可擴展

熟悉使用Flexbox布局(比如RN、Flutter)的人會從Texture發(fā)現(xiàn)許多相似的地方。

Flexbox旨在為不同的屏幕尺寸提供一致的布局。在堆棧布局中,您可以在垂直或水平堆棧中對齊項目。堆棧布局可以是另一個堆棧布局的子代,這使得使用堆棧布局規(guī)范創(chuàng)建幾乎任何布局成為可能。

Texture布局主要圍繞這兩個中心概念:

  • Layout Elements
  • Layout Specs

Layout Elements

布局規(guī)范(ASLayoutSpec)由布局元素構(gòu)成并對他們進行排列,并且所有的節(jié)點(ASDisplayNode)和布局規(guī)范都遵循了ASLayoutElement的協(xié)議,這意味著我們可以通過節(jié)點和其他作為子元素的規(guī)范來組合實現(xiàn)復雜的布局規(guī)范。

Layout Specs

布局規(guī)范可以作為一個盛放布局元素的容器通過理解布局元素的布局來使他們可以相互關(guān)聯(lián)。
Texture提供了幾個ASLayoutSpec的子類:

ASWrapperLayoutSpec

作為ASLayoutSpec一個簡單的子類,它可以包裹ASLayoutElement并根據(jù)布局元素上設(shè)置的大小計算子項的布局。

ASStackLayoutSpec

作為Texture最有用最強大的布局規(guī)范,ASStackLayoutSpec使用flexbox算法確定其子項的位置和大小。
ASStackLayoutSpec除了具有布局元素所具有的屬性外,還額外提供了7個屬性:

  • direction:指定子元素的堆疊方法,既設(shè)定主軸的方向
  • spacing:所有子元素之間的間距
  • horizontalAlignment:指定子元素在水平方向上的對齊方式
  • verticalAlignment:指定子元素在垂直方向上的對齊方式
  • justifyContent:指定子元素沿著主軸的排列方式
  • alignItems:指定子元素沿著次軸的排列方式
  • flexWrap:子元素是否堆疊為多行
  • alignContent:當子元素堆疊為多行時,多行的對齊方式


    justifyContent.png
ASInsetLayoutSpec

ASInsetLayoutSpec會在減去上左下右的插入間距后將約束后的最大Size傳遞給其子元素。一旦子元素確定了它的最終尺寸,ASInsetLayoutSpec就會將其尺寸加上插入邊距作為最終尺寸。因此子元素必須具有內(nèi)部大小或明確設(shè)置其大小。


ASInsetLayoutSpec

我們可以使用INFINITY作為插入間距中的值來保持子元素原有的尺寸。

ASOverlayLayoutSpec

在子元素上拉伸覆蓋另一個元素。疊加元素的大小會根據(jù)子元素進行計算。

ASBackgroundLayoutSpec

與ASOverlayLayoutSpec相反,在子元素后拉伸墊底另一個元素。墊底元素的大小會根據(jù)子元素進行計算。

ASCenterLayoutSpec

該規(guī)范會根據(jù)規(guī)范的最大約束大小將其子元素置于居中位置。


ASCenterLayoutSpec
ASRatioLayoutSpec

ASRatioLayoutSpec以固定的寬高比進行縮放的布局規(guī)范。此規(guī)范必須具有作constrainedSize為它傳遞寬度或高度。


ASRatioLayoutSpec
ASRelativeLayoutSpec

根據(jù)垂直和水平位置說明符布置組件并將其放置在布局邊界內(nèi)。

ASAbsoluteLayoutSpec

字面上的意思,絕對布局,在iOS開發(fā)上都熟。

ASCornerLayoutSpec

ASCornerLayoutSpec是一種用于快速角元素布局的規(guī)范。通過使用聲明性代碼表達式而不是手動坐標計算的方法在角落中定位元素。


ASCornerLayoutSpec

在了解到Texture的布局后我們下面將會開始通過組合布局規(guī)范與布局元素來構(gòu)造復雜的頁面。

參考資料

Texture - Layout
AsyncDisplayKit系列之ASLayoutSpec布局

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,113評論 1 92
  • 翻譯自“Auto Layout Guide”。 1 入門 1.1 理解自動布局 自動布局根據(jù)視圖層級結(jié)構(gòu)中視圖上的...
    lakerszhy閱讀 3,921評論 3 26
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,186評論 3 119
  • Texture快速開始(C) 1.1: Motivation & Benefits 對于復雜的視圖層次結(jié)構(gòu)來說,U...
    iYeso閱讀 1,587評論 0 3
  • 為誰醉倒為誰醒?到今猶恨輕別離。 兩年前,從西安走的那天,烏云把天空壓的很低很低,看著車窗上滑下的...
    從此無恙閱讀 177評論 0 1

友情鏈接更多精彩內(nèi)容