「iOS」譯-AsyncDisplaykit2-0使用「復雜界面流暢性」附demo

本文來自尚妝iOS團隊嘉文
發(fā)表于尚妝github博客房待,歡迎訂閱!

原文鏈接 http://texturegroup.org/docs/getting-started.html

AsyncDisplaykit2.0

前言

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

AsyncDisplayKit

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

官方地址

目錄

  • Quickstart(快速學習)
  • 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(快速學習)

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

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

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

2火诸、LayoutElements(布局元素)

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

3焕盟、組合LayoutSpecs和LayoutElements秋秤,創(chuàng)建復雜的UI

可以看到如何將ASTextNode(黃色高亮),ASVideoNode(頂部圖像)和ASStackLayoutSpec(“堆放布局規(guī)則”)組合來創(chuàng)建復雜布局。
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必須設置它們的初始大小蒋困,使用ASRatioLayoutSpec(“比例布局規(guī)則”)盾似,ASAbsoluteLayoutSpec(“絕對布局規(guī)則”)或者對象的size屬性。

5雪标、Layout調(diào)試

#在任何ASDisplayNode或ASLayoutSpec上調(diào)用-asciiArtString零院,會返回對象及其子對象的字符圖。
(可選)如果在任何Node或layoutSpec上設置.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(簡單標題左右對齊)

layout-examples-1

示例工程

創(chuàng)建布局:

約束 說明
ASStackLayoutSpec 垂直的
ASStackLayoutSpec 水平的
ASInsetLayoutSpec 插入整個標題

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

layout-examples-2.png

代碼:

//Objective-C
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  
  // 當用戶名和位置信息文本太長時,收縮堆放視圖來適應屏幕,而不是將所有內(nèi)容向右堆放
  ASStackLayoutSpec *nameLocationStack = [ASStackLayoutSpec verticalStackLayoutSpec];
  nameLocationStack.style.flexShrink = 1.0;
  nameLocationStack.style.flexGrow = 1.0;
  
  //如果從服務器獲取位置信息,并檢查位置信息是否可用
  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];
  
}

將示例項目從縱向旋轉到橫向募疮,看看間隔體是如何增長和收縮的。

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(圖片上覆蓋和圖標)

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子類稿蹲,用于組成簡單或復雜的布局

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

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

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

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

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

代碼:

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

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

ASOverlayLayoutSpec布局一個組件(紅色)拣宰,作為覆蓋伸展到另個組件(藍色)之前覆蓋布局的大小,是根據(jù)子項的大小計算得出的烦感。下圖中巡社,子項是藍色層,然后子項的大小作為constrainedSize傳遞給覆蓋布局元素(紅色層)手趣,子項(藍色層)必須具有固有大小或在其上設置的大小晌该。
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布局一個組件(紅色)绿渣,作為背景伸展到另一個組件(藍色)之后背景布局的大小气笙,是根據(jù)子項的大小計算得出的。下圖中怯晕,子項是藍色層潜圃,然后,子項的大小作為constrainedSize傳遞給背景布局元素(紅色層)舟茶,子項(藍色層)必須具有固有大小或在其上設置的大小谭期。
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提供固有大小是非常常見的轴咱,因為兩者在服務器返回內(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 方向 指定堆疊方向,如果設置了horizontalAlignment和verticalAlignment,它們將被再次解決欣除,導致justifyContent和alignItems被相應地更新住拭。
spacing 間距 每個子元素之間的距離。
horizontalAlignment 水平對齊 指定子元素如何水平排列,取決于堆疊方向历帚,設置對齊會導致justifyContent或alignItems被更新滔岳。未來方向更改后,對齊將保持有效挽牢。因此谱煤,優(yōu)選那些性質(zhì)。
verticalAlignment 豎直對齊 指定子元素如何垂直排列,取決于堆疊方向禽拔,設置對齊會導致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]];

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

  return mainStack;
}

說明:

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

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

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

ASAbsoluteLayoutSpec屬性:

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

確定絕對規(guī)格將占用多少空間弹澎。
注意:Size to Fit選項將復制舊的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ī)格,只有超級高級應該希望/需要創(chuàng)建ASLayoutSpec的自定義子類佩迟。相反团滥,嘗試使用提供的布局規(guī)則,并將它們組合在一起以創(chuàng)建更高級的布局报强。

ASLayoutSpec的另一個用途是充當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 ** 用于基線對準。從對象的頂部到其基線的距離侮东。
.style.descender **CGFloat ** 用于基線對準圈盔。從對象的底部部到其基線的距離

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

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

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

屬性 類型 描述
.style.width ASDimension 設置元素的寬度。 會被minWidth和maxWidth覆蓋宽闲。默認為ASDimensionAuto
.style.height ASDimension 設置元素的高度众眨。 會被minHeight和maxHeight覆蓋握牧。默認為ASDimensionAuto。
.style.minHeight ASDimension 設置元素的最大高度娩梨。 它防止height屬性的已使用值變得大于為maxHeight指定的值沿腰。 maxHeight的值覆蓋height,但minHeight覆蓋maxHeight狈定。默認為ASDimensionAuto
.style.maxHeight ASDimension 如果子元素的堆棧大小的總和大于最大大小颂龙,那么這個對象是否應該縮小呢?
.style.minWidth ASDimension 設置元素的最小寬度纽什。它防止width屬性的使用值變得小于為minWidth指定的值措嵌。 minWidth的值覆蓋maxWidth和width。默認為ASDimensionAuto
.style.maxWidth ASDimension 設置元素的最大寬度芦缰。 它防止width屬性的使用值變得大于為maxWidth指定的值企巢。 maxWidth的值覆蓋width,但minWidth覆蓋maxWidth饺藤。默認為ASDimensionAuto
.style.preferredSize **CGSize ** 提供布局元素的建議大小包斑。 如果提供了可選的minSize或maxSize流礁,且preferredSize超過這些涕俗,則將強制執(zhí)行minSize或maxSize, 如果未提供此可選值,則布局元素的大小將默認為其提供的內(nèi)在內(nèi)容大小calculateSizeThatFits:
.style.minSize **CGSize **
.style.maxSize **CGSize **
.style.preferredLayoutSize ASLayoutSize
.style.minLayoutSize ASLayoutSize
.style.maxLayoutSize ASLayoutSize ...

Demo

Demo地址

AsyncDisplaykit2.0使用
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末神帅,一起剝皮案震驚了整個濱河市再姑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌找御,老刑警劉巖元镀,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異霎桅,居然都是意外死亡栖疑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門滔驶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遇革,“玉大人,你說我怎么就攤上這事揭糕÷芸欤” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵著角,是天一觀的道長揪漩。 經(jīng)常有香客問我,道長吏口,這世上最難降的妖魔是什么奄容? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任冰更,我火速辦了婚禮,結果婚禮上嫩海,老公的妹妹穿的比我還像新娘冬殃。我一直安慰自己,他們只是感情好叁怪,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布审葬。 她就那樣靜靜地躺著,像睡著了一般奕谭。 火紅的嫁衣襯著肌膚如雪涣觉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天血柳,我揣著相機與錄音官册,去河邊找鬼。 笑死难捌,一個胖子當著我的面吹牛膝宁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播根吁,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼员淫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了击敌?” 一聲冷哼從身側響起介返,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沃斤,沒想到半個月后圣蝎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡衡瓶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年徘公,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哮针。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡关面,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诚撵,到底是詐尸還是另有隱情缭裆,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布寿烟,位于F島的核電站澈驼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏筛武。R本人自食惡果不足惜缝其,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一挎塌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧内边,春花似錦榴都、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至和屎,卻和暖如春拴驮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柴信。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工套啤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人随常。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓潜沦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绪氛。 傳聞我的和親對象是個殘疾皇子唆鸡,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 前言 AsyncDisplayKit是一個建立在UIKit基礎上的iOS框架,讓即使是最復雜的用戶界面光滑和響應钞楼。...
    LuisX閱讀 14,923評論 31 80
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案喇闸? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,734評論 1 92
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理袄琳,服務發(fā)現(xiàn)询件,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 文/六竹葉 南方的春天唆樊,雨季特別漫長宛琅,反反復復,斷斷續(xù)續(xù)逗旁,每年幾乎都能持續(xù)一個月之久嘿辟。雖然個性優(yōu)柔又多情善感,也很...
    姍姍讀書閱讀 594評論 4 3
  • 如果生命重來一次 我希望你不要放棄 那么我會緊緊抓住那份遲來的幸福 只可惜 這個世界沒有 如果
    韻婷閱讀 122評論 0 0