AsyncDisplaykit2.0(Texture)使用「復(fù)雜界面流暢性」

AsyncDisplaykit2.0

前言

AsyncDisplayKit是一個建立在UIKit基礎(chǔ)上的iOS框架,讓即使是最復(fù)雜的用戶界面光滑和響應(yīng)。它最初建成Facebook的Paper應(yīng)用,并與流行的pop基于物理的動畫相輔相成——它與UIKit動力學(xué)和傳統(tǒng)應(yīng)用程序的設(shè)計同樣強大。最近,它是用于Pinterest應(yīng)用的重寫。

AsyncDisplayKit

隨著框架的發(fā)展,添加了許多功能,在現(xiàn)代iOS應(yīng)用程序中通過消除常見的樣板風(fēng)格和結(jié)構(gòu)可以節(jié)省開發(fā)人員大量的時間。如果你曾經(jīng)處理過Cell重用的Bug,試圖高性能預(yù)加載數(shù)據(jù)頁面或滾動風(fēng)格界面,甚至只是試圖讓你的應(yīng)用從下降太多的幀可以受益于整合ASDK。

官方地址

目錄

  • Quickstart(快速學(xué)習(xí))
  • Layout Examples(布局示例)
  • Layout Specs(布局規(guī)則)
  • ASInsetLayoutSpec(插入布局規(guī)則)
  • ASOverlayLayoutSpec(覆蓋布局規(guī)則)
  • ASBackgroundLayoutSpec(背景布局規(guī)則)
  • ASCenterLayoutSpec(中心布局規(guī)則)
  • ASRatioLayoutSpec(比例布局規(guī)則)
  • ASRelativeLayoutSpec(相對布局規(guī)則)
  • ASStackLayoutSpec(堆疊布局規(guī)則)
  • ASAbsoluteLayoutSpec(絕對布局約束)
  • ASLayoutSpec(布局規(guī)則)
  • Layout Element Properties(布局元素屬性)
  • ASStackLayoutElement Properties(堆疊布局元素屬性)
  • ASAbsoluteLayoutElement Properties(絕對布局元素屬性)
  • ASLayoutElement Properties(布局元素屬性)

章節(jié)

一、Quickstart(快速學(xué)習(xí))

基本概念 英文 中文
Layout Specs specification 布局規(guī)則
Layout Elements Elements 布局元素

1、LayoutSpecs(布局規(guī)則)

LayoutSpecs是“l(fā)ayout specification”的縮寫,沒有物理存在。
相反,LayoutSpecs充當(dāng)其他LayoutElements的容器,來理解這些子LayoutElements如何相互關(guān)聯(lián)。
AsyncDisplayKit提供了ASLayoutSpec的幾個子類。
從插入單個簡單布局規(guī)則到更多更復(fù)雜的布局規(guī)則,變化堆放排列配置。

2、LayoutElements(布局元素)

LayoutSpecs包含并排列LayoutElements。
所有ASDisplayNodes和ASLayoutSpecs都符合<ASLayoutElement>協(xié)議。
這意味著您可以從Nodes和其他LayoutSpecs構(gòu)成LayoutSpecs。
ASLayoutElement協(xié)議有幾個屬性,可用于創(chuàng)建非常復(fù)雜的LayoutSpecs。
此外LayoutSpecs也具有自己的一組屬性,可用于調(diào)整LayoutElements的排列。

3、組合LayoutSpecs和LayoutElements,創(chuàng)建復(fù)雜的UI

可以看到如何將ASTextNode(黃色高亮),ASVideoNode(頂部圖像)和ASStackLayoutSpec(“堆放布局規(guī)則”)組合來創(chuàng)建復(fù)雜布局。
LayoutSpecs和LayoutElements
使用ASCenterLayoutSpec(“中心布局規(guī)則”)和ASOverlayLayoutSpec(“覆蓋布局規(guī)則”),來放置頂部ASVideoNode(頂部圖像)的播放按鈕。
LayoutSpecs和LayoutElements

4、一些Node需要固定大小

#一些元素具有一個”固有大小“,基于他們可用內(nèi)容。
例如,ASTextNode可以根據(jù)其屬性字符串計算其大小,其他具有固有大小的Node包括:
ASImageNode
ASTextNode
ASButtonNode
ASTextNode
#所有其他Node在外部資源加載完成之前沒有或者缺乏固有大小。
例如,在從URL下載圖像之前,ASNetworkImageNode不知道它的大小。這些種類包括:
ASVideoNode
ASVideoPlayerNode
ASNetworkImageNode
ASEditableTextNode
#注意:
#缺少初始固有大小的這些Node必須設(shè)置它們的初始大小,使用ASRatioLayoutSpec(“比例布局規(guī)則”),ASAbsoluteLayoutSpec(“絕對布局規(guī)則”)或者對象的size屬性。

5、Layout調(diào)試

#在任何ASDisplayNode或ASLayoutSpec上調(diào)用-asciiArtString,會返回對象及其子對象的字符圖。
(可選)如果在任何Node或layoutSpec上設(shè)置.debugName,那么也將包含在字符圖。
例如:
  -----------------------ASStackLayoutSpec----------------------
|  -----ASStackLayoutSpec-----  -----ASStackLayoutSpec-----  |
|  |       ASImageNode       |  |       ASImageNode       |  |
|  |       ASImageNode       |  |       ASImageNode       |  |
|  ---------------------------  ---------------------------  |
--------------------------------------------------------------
#可以在任何ASLayoutElement(node或layoutSpec)上打印對象樣式,調(diào)整大小屬性時極其方便。
例如:
(lldb) po _photoImageNode.style
Layout Size = min {414pt, 414pt} <= preferred {20%, 50%} <= max {414pt, 414pt}

二、Layout Examples(布局示例)

1、Simple Header with Left and Right Justified Text(簡單標(biāo)題左右對齊)

layout-examples-1

示例工程

創(chuàng)建布局:

約束 說明
ASStackLayoutSpec 垂直的
ASStackLayoutSpec 水平的
ASInsetLayoutSpec 插入整個標(biāo)題

布局的組成(layout specs + nodes),如圖:

layout-examples-2.png

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  
  // 當(dāng)用戶名和位置信息文本太長時,收縮堆放視圖來適應(yīng)屏幕,而不是將所有內(nèi)容向右堆放
  ASStackLayoutSpec *nameLocationStack = [ASStackLayoutSpec verticalStackLayoutSpec];
  nameLocationStack.style.flexShrink = 1.0;
  nameLocationStack.style.flexGrow = 1.0;
  
  //如果從服務(wù)器獲取位置信息,并檢查位置信息是否可用
  if (_postLocationNode.attributedText) {
    nameLocationStack.children = @[_usernameNode, _postLocationNode];
  } else {
    nameLocationStack.children = @[_usernameNode];
  }
  
  //水平堆放
  ASStackLayoutSpec *headerStackSpec = [ASStackLayoutSpec   stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
                     spacing:40     
              justifyContent:ASStackLayoutJustifyContentStart
                  alignItems:ASStackLayoutAlignItemsCenter
                    children:@[nameLocationStack, _postTimeNode]];
  
  //插入堆放
  return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(0, 10, 0, 10)    
                                                child:headerStackSpec];
  
}

將示例項目從縱向旋轉(zhuǎn)到橫向,看看間隔體是如何增長和收縮的。

2、Photo with Inset Text Overlay(圖片上覆蓋文本)

layout-examples-3.png

創(chuàng)建布局:

約束 說明
ASInsetLayoutSpec 插入文本
ASOverlayLayoutSpec 插入文本覆蓋在圖片上

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  
  _photoNode.style.preferredSize = CGSizeMake(USER_IMAGE_HEIGHT*2, USER_IMAGE_HEIGHT*2);
  
  // INIFINITY(插入無邊界)
  UIEdgeInsets insets = UIEdgeInsetsMake(INFINITY, 12, 12, 12);
  ASInsetLayoutSpec *textInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:_titleNode];
  
  return [ASOverlayLayoutSpec overlayLayoutSpecWithChild:_photoNode 
                                                 overlay:textInsetSpec];
  
}

3、Photo with Outset Icon Overlay(圖片上覆蓋和圖標(biāo))

layout-examples-4.png

創(chuàng)建布局:

約束 說明
ASAbsoluteLayoutSpec 放置照片和icon
ASLayoutable屬性 單獨調(diào)整大小和位置

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  
  _iconNode.style.preferredSize = CGSizeMake(40, 40);
  _iconNode.style.layoutPosition = CGPointMake(150, 0);
  
  _photoNode.style.preferredSize = CGSizeMake(150, 150);
  _photoNode.style.layoutPosition = CGPointMake(40 / 2.0, 40 / 2.0);
  
  return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithSizing:ASAbsoluteLayoutSpecSizingSizeToFit
                                                   children:@[_photoNode, _iconNode]];
  
}  

4、Simple Inset Text Cell(簡單插入文本單元格)

layout-examples-5

創(chuàng)建布局:

約束 說明
ASInsetLayoutSpec 插入文本
ASCenterLayoutSpec 根據(jù)指定屬性文本居中

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{

    UIEdgeInsets insets = UIEdgeInsetsMake(0, 12, 4, 4);
    ASInsetLayoutSpec *inset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets
                                                                      child:_titleNode];

    return [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringY                                                  
    sizingOptions:ASCenterLayoutSpecSizingOptionMinimumX 
            child:inset];
            
}

5、Top and Bottom Separator Lines(頂部和底部分隔線)

layout-examples-6.png

創(chuàng)建布局:

約束 說明
ASInsetLayoutSpec 插入文本
ASStackLayoutSpec 垂直的堆放文本上下分割線

布局的組成(layout specs + nodes),如圖:

layout-examples-7.png

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{

  _topSeparator.style.flexGrow = 1.0;
  _bottomSeparator.style.flexGrow = 1.0;

  ASInsetLayoutSpec *insetContentSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(20, 20, 20, 20) child:_textNode];

  return [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical
                                                 spacing:0
                                          justifyContent:ASStackLayoutJustifyContentCenter
                                              alignItems:ASStackLayoutAlignItemsStretch
                                                children:@[_topSeparator, insetContentSpec, _bottomSeparator]];
}
  

三、Layout Specs(布局規(guī)則)

1、以下ASLayoutSpec子類,用于組成簡單或復(fù)雜的布局

布局規(guī)則 說明
ASInsetLayoutSpec 插入布局
ASOverlayLayoutSpec 覆蓋布局
ASBackgroundLayoutSpec 背景布局
ASCenterLayoutSpec 中心布局
ASRatioLayoutSpec 比例布局
ASStackLayoutSpec 堆疊布局
ASAbsoluteLayoutSpec 絕對布局

你可以子類化ASLayoutSpec,自定義ASLayoutSpec

四、ASInsetLayoutSpec(插入布局規(guī)則)

在布局過程中,ASInsetLayoutSpec通過constrainedSize.max傳遞插入減掉后的CGSize給子項,一旦子項確定它的最終尺寸,插入規(guī)則將其最終尺寸加上其插入邊距向上傳遞,由于插圖布局規(guī)則的大小基于其子項的大小,所以子項必須具有固有大小或明確設(shè)置其大小。
ASInsetLayoutSpec-diagram-1.png

1、如果在UIEdgeInsets中設(shè)置了INFINITY作為值,插入規(guī)則只使用子項固有大小。

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
{
  ...
  UIEdgeInsets *insets = UIEdgeInsetsMake(10, 10, 10, 10);
  ASInsetLayoutSpec *headerWithInset = insetLayoutSpecWithInsets:insets child:textNode];
  ...
}

五、ASOverlayLayoutSpec(覆蓋布局規(guī)則)

ASOverlayLayoutSpec布局一個組件(紅色),作為覆蓋伸展到另個組件(藍(lán)色)之前覆蓋布局的大小,是根據(jù)子項的大小計算得出的。下圖中,子項是藍(lán)色層,然后子項的大小作為constrainedSize傳遞給覆蓋布局元素(紅色層),子項(藍(lán)色層)必須具有固有大小或在其上設(shè)置的大小。
ASOverlayLayouSpec-diagram-2.png

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor blueColor]);
  ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]
  return [ASOverlayLayoutSpec overlayLayoutSpecWithChild:backgroundNode overlay:foregroundNode]];
}

六、ASBackgroundLayoutSpec(背景布局規(guī)則)

ASBackgroundLayoutSpec布局一個組件(紅色),作為背景伸展到另一個組件(藍(lán)色)之后背景布局的大小,是根據(jù)子項的大小計算得出的。下圖中,子項是藍(lán)色層,然后,子項的大小作為constrainedSize傳遞給背景布局元素(紅色層),子項(藍(lán)色層)必須具有固有大小或在其上設(shè)置的大小。
ASBackgroundLayoutSpec-diagram-3.png

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]);
  ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor blueColor]);
  return [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:foregroundNode background:backgroundNode]];
}

七、ASCenterLayoutSpec(中心布局規(guī)則)

ASCenterLayoutSpec將其子項居中在其最大值中constrainedSize。
如果中心規(guī)格的寬度或高度不受約束,它會縮小到子項的大小。

ASCenterLayoutSpec的兩個屬性:

屬性 說明
centeringOptions 確定中心位置 None,X,Y,XY
sizingOptions 確定中心占用空間 Default,minimum X,minimum Y,minimum XY
ASCenterLayoutSpec-diagram-4.png

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  ASStaticSizeDisplayNode *subnode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], CGSizeMake(70, 100));
  return [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY
                                             sizingOptions:ASRelativeLayoutSpecSizingOptionDefault
                                                     child:subnode]
}

八、ASRatioLayoutSpec(比例布局規(guī)則)

ASRatioLayoutSpec布局縮放固定寬高比,此規(guī)則必須具有作為constrainedSize傳遞給它的寬度或高度,因為它使用此值來縮放自身。
使用比例布局為ASNetworkImageNode或ASVideoNode提供固有大小是非常常見的,因為兩者在服務(wù)器返回內(nèi)容之前都沒有內(nèi)在大小。
ASRatioLayoutSpec-diagram-5.png

代碼:

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  //一半比例
  ASStaticSizeDisplayNode *subnode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], CGSizeMake(100, 100));
  return [ASRatioLayoutSpec ratioLayoutSpecWithRatio:0.5 child:subnode];
}

九、ASRelativeLayoutSpec(相對布局規(guī)則)

根據(jù)垂直和水平位置說明范圍內(nèi)布局組件,子項可以被定位在4個角中的任何一個,或者4個邊緣中的任何一個,以及中心。

代碼:

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  ...
  ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]);
  ASStaticSizeDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], CGSizeMake(70, 100));

  ASRelativeLayoutSpec *relativeSpec = [ASRelativeLayoutSpec relativePositionLayoutSpecWithHorizontalPosition:ASRelativeLayoutSpecPositionStart
                                verticalPosition:ASRelativeLayoutSpecPositionStart
                                    sizingOption:ASRelativeLayoutSpecSizingOptionDefault                                                                       
                                           child:foregroundNode]

  ASBackgroundLayoutSpec *backgroundSpec = [ASBackgroundLayoutSpecbackgroundLayoutSpecWithChild:relativeSpec background:backgroundNode];
  ...
}

十、ASStackLayoutSpec(堆疊布局規(guī)則)

在ASDK中的所有l(wèi)ayoutSpecs中,ASStackLayoutSpec是非常強大的,ASStackLayoutSpec使用flexbox算法來確定其子節(jié)點的位置和大小,F(xiàn)lexbox旨在在不同的屏幕尺寸上提供一致的布局,在堆疊布局中,以垂直或水平堆疊對齊item。堆疊布局可以是另一個堆疊布局的子布局,這使得可以使用堆疊布局規(guī)則創(chuàng)建幾乎任何布局。

ASStackLayoutSpec除了ASLayoutElement還有7個屬性:

屬性 說明 描述
direction 方向 指定堆疊方向,如果設(shè)置了horizontalAlignment和verticalAlignment,它們將被再次解決,導(dǎo)致justifyContent和alignItems被相應(yīng)地更新。
spacing 間距 每個子元素之間的距離。
horizontalAlignment 水平對齊 指定子元素如何水平排列,取決于堆疊方向,設(shè)置對齊會導(dǎo)致justifyContent或alignItems被更新。未來方向更改后,對齊將保持有效。因此,優(yōu)選那些性質(zhì)。
verticalAlignment 豎直對齊 指定子元素如何垂直排列,取決于堆疊方向,設(shè)置對齊會導(dǎo)致justifyContent或alignItems被更新。未來方向更改后,對齊將保持有效。因此,優(yōu)選那些性質(zhì)。
justifyContent 對齊內(nèi)容 每個子元素之間的距離。
alignItems 對齊Item 子元素沿著橫軸的方向。
baselineRelativeArrangement 基線相對布局 如果YES,則從頂視圖的最后基線到底視圖的頂部測量兩個視圖之間的垂直間距。

代碼:

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{

  ASStackLayoutSpec *mainStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal                                                                                   spacing:6.0
        justifyContent:ASStackLayoutJustifyContentStart
     alignItems:ASStackLayoutAlignItemsCenter
                  children:@[_iconNode, _countNode]];

  //設(shè)置一些大小約束
  mainStack.minWidth = ASDimensionMakeWithPoints(60.0);
  mainStack.maxHeight = ASDimensionMakeWithPoints(40.0);

  return mainStack;
}

說明:

Flexbox在AsyncDisplayKit中的工作方式與在Web上的CSS中的工作方式相同,有一些例外。
默認(rèn)值不同,沒有flex參數(shù),flexGrow和flexShrink只支持一個布爾值。

十一、ASAbsoluteLayoutSpec(絕對布局約束)

在ASAbsoluteLayoutSpec中,可以通過設(shè)置其layoutPosition屬性來指定其子元素的確切位置(x / y坐標(biāo)),絕對布局比其他類型的布局更不靈活和難以維護(hù)。

ASAbsoluteLayoutSpec屬性:

屬性 說明
sizing 大小 Default / Size to Fit

確定絕對規(guī)格將占用多少空間。
注意:Size to Fit選項將復(fù)制舊的ASStaticLayoutSpec行為。

代碼:

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{

  CGSize maxConstrainedSize = constrainedSize.max;

  //在靜態(tài)布局中布局所有Node
  guitarVideoNode.layoutPosition = CGPointMake(0, 0);
  guitarVideoNode.size = ASSizeMakeFromCGSize(CGSizeMake(maxConstrainedSize.width, maxConstrainedSize.height / 3.0));

  nicCageVideoNode.layoutPosition = CGPointMake(maxConstrainedSize.width / 2.0, maxConstrainedSize.height / 3.0);
  nicCageVideoNode.size = ASSizeMakeFromCGSize(CGSizeMake(maxConstrainedSize.width / 2.0, maxConstrainedSize.height / 3.0));

  simonVideoNode.layoutPosition = CGPointMake(0.0, maxConstrainedSize.height - (maxConstrainedSize.height / 3.0));
  simonVideoNode.size = ASSizeMakeFromCGSize(CGSizeMake(maxConstrainedSize.width/2, maxConstrainedSize.height / 3.0));

  hlsVideoNode.layoutPosition = CGPointMake(0.0, maxConstrainedSize.height / 3.0);
  hlsVideoNode.size = ASSizeMakeFromCGSize(CGSizeMake(maxConstrainedSize.width / 2.0, maxConstrainedSize.height / 3.0));

  return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[guitarVideoNode, nicCageVideoNode, simonVideoNode, hlsVideoNode]];
}

十二、ASLayoutSpec(布局規(guī)則)

ASLayoutSpec是所有布局規(guī)則都被子類化的父類,它的主要工作是處理和管理所有的子類,但它也可以用于創(chuàng)建自定義布局規(guī)格,只有超級高級應(yīng)該希望/需要創(chuàng)建ASLayoutSpec的自定義子類。相反,嘗試使用提供的布局規(guī)則,并將它們組合在一起以創(chuàng)建更高級的布局。

ASLayoutSpec的另一個用途是充當(dāng)ASStackLayoutSpec中的其他子元素,在使用.flexGrow和/或.flexShrink時。

代碼:

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  ...
  // ASLayoutSpec作為間隔
  let spacer = ASLayoutSpec()
  spacer.flexGrow = true

  stack.children = [imageNode, spacer, textNode]
  ...
}

十三、Layout Element Properties(布局元素屬性)

屬性 說明
ASStackLayoutElement Properties 只對stack堆疊布局的Node生效
ASAbsoluteLayoutElement Properties 只對absolute絕對布局的Node生效
ASLayoutElement Properties 對所有布局和Node生效

十四、ASStackLayoutElement Properties(堆疊布局元素屬性)

屬性 類型 描述
.style.spacingBefore **CGFloat ** 在堆疊方向上放置此對象之前的額外空間。
.style.spacingAfter **CGFloat ** 在堆疊方向上放置此對象之后的額外空間。
.style.flexGrow BOOL 如果子元素的堆疊大小的總和小于最小大小,那么這個對象是否增長?
.style.flexShrink **BOOL ** 如果子元素的堆疊大小的總和大于最大大小,那么這個對象是否縮小?
.style.flexBasis ASDimension 使用flexGrow或flexShrink屬性并分配剩余空間之前,在堆棧維度(水平或垂直)中指定此對象的初始大小。
.style.alignSelf **ASStackLayoutAlignSelf ** 沿著橫軸的對象的方向,覆蓋alignItems。(ASStackLayoutAlignSelfAuto,ASStackLayoutAlignSelfStart, ASStackLayoutAlignSelfEnd, ASStackLayoutAlignSelfCenter, ASStackLayoutAlignSelfStretch)
.style.ascender **CGFloat ** 用于基線對準(zhǔn)。從對象的頂部到其基線的距離。
.style.descender **CGFloat ** 用于基線對準(zhǔn)。從對象的底部部到其基線的距離

十五、ASAbsoluteLayoutElement Properties(絕對布局元素屬性)

屬性 類型 描述
.style.layoutPosition **CGPoint ** 該對象在ASAbsoluteLayoutSpec父規(guī)則中的CGPoint位置。

十六、ASLayoutElement Properties(布局元素屬性)

屬性 類型 描述
.style.width ASDimension 設(shè)置元素的寬度。 會被minWidth和maxWidth覆蓋。默認(rèn)為ASDimensionAuto
.style.height ASDimension 設(shè)置元素的高度。 會被minHeight和maxHeight覆蓋。默認(rèn)為ASDimensionAuto。
.style.minHeight ASDimension 設(shè)置元素的最大高度。 它防止height屬性的已使用值變得大于為maxHeight指定的值。 maxHeight的值覆蓋height,但minHeight覆蓋maxHeight。默認(rèn)為ASDimensionAuto
.style.maxHeight ASDimension 如果子元素的堆棧大小的總和大于最大大小,那么這個對象是否應(yīng)該縮小呢?
.style.minWidth ASDimension 設(shè)置元素的最小寬度。它防止width屬性的使用值變得小于為minWidth指定的值。 minWidth的值覆蓋maxWidth和width。默認(rèn)為ASDimensionAuto
.style.maxWidth ASDimension 設(shè)置元素的最大寬度。 它防止width屬性的使用值變得大于為maxWidth指定的值。 maxWidth的值覆蓋width,但minWidth覆蓋maxWidth。默認(rèn)為ASDimensionAuto
.style.preferredSize **CGSize ** 提供布局元素的建議大小。 如果提供了可選的minSize或maxSize,且preferredSize超過這些,則將強制執(zhí)行minSize或maxSize, 如果未提供此可選值,則布局元素的大小將默認(rèn)為其提供的內(nèi)在內(nèi)容大小calculateSizeThatFits:
.style.minSize **CGSize **
.style.maxSize **CGSize **
.style.preferredLayoutSize ASLayoutSize
.style.minLayoutSize ASLayoutSize
.style.maxLayoutSize ASLayoutSize ...

Demo

Demo地址

AsyncDisplaykit2.0使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內(nèi)容