Texture

Texture布局文档

2018-11-13  本文已影响67人  Michale_Zuo

Layout 布局

 ASDK有一套自己的成熟的的布局方案,最大的好处是提升性能,这套布局主要借鉴了CSS的FlexBox思想,在布局的时候我们要注意一个原则:
从里往外!

// 1.自定义node
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize{
  请在这里进行布局
  、、、
}

// 2.没有自定义node
self.node.layoutSpecBlock = ^ASLayoutSpec *(ASDisplayNode *node, ASSizeRange constrainedSize) {

  请在这里进行布局
  、、、
};

相关API继承关系

ASStackLayoutSpec

 ASStackLayoutSpec是比较常用的spec,包含几个常见的属性:

ASAbsoluteLayoutSpec
ASAbsoluteLayoutSpec *absoluteLayoutSpec = [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[self.photoNode,
            self.iconNode]];
return absoluteLayoutSpec;
ASBackgroundLayoutSpec && ASOverlayLayoutSpec
ASBackgroundLayoutSpec *backgroundLayoutSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:self.blueNode
                                                                                             background:self.redNode];

// child:是在下面的视图,overlay是设置在上层的视图
ASOverlayLayoutSpec *overlayLayoutSpec = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:self.redNode overlay:self.blueNode];
ASInsetLayoutSpec
ASInsetLayoutSpec *insetLayoutSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(30, 30, 30, 30)
                                                                                child:self.cyanNode];
ASRatioLayoutSpec
layout-2.png
ASRelativeLayoutSpec
self.subNode.style.preferredSize = CGSizeMake(100, 100);
ASRelativeLayoutSpec *relativeLayoutSpec = [ASRelativeLayoutSpec
          relativePositionLayoutSpecWithHorizontalPosition:ASRelativeLayoutSpecPositionEnd
                                          verticalPosition:ASRelativeLayoutSpecPositionCenter
                                              sizingOption:ASRelativeLayoutSpecSizingOptionDefault child:self.subNode];

return relativeLayoutSpec;  
ASCenterLayoutSpec
layout-3.png
ASCenterLayoutSpec *centerLayoutSpec = [ASCenterLayoutSpec
           centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY
                                  sizingOptions:ASCenterLayoutSpecSizingOptionDefault child:self.subNode];
ASWrapperLayoutSpec
ASCornerLayoutSpec
layout-4.png
// corner:边角上的node
// location: corner的位置可以设置为
/*
    ASCornerLayoutLocationTopLeft, 左上
    ASCornerLayoutLocationTopRight, 右上
    ASCornerLayoutLocationBottomLeft, 左下
    ASCornerLayoutLocationBottomRight, 右下
*/

ASCornerLayoutSpec *cornerLayoutSpec = [ASCornerLayoutSpec cornerLayoutSpecWithChild:self.photoNode corner:self.dotNode
                                                                                location:ASCornerLayoutLocationTopRight];
    // offset:corner的偏移量            
    cornerLayoutSpec.offset = CGPointMake(-3, 3);
    self.photoNode.style.preferredSize = CGSizeMake(100, 100);
    self.dotNode.style.preferredSize = CGSizeMake(10, 10);
    return cornerLayoutSpec;

layout 元素的属性

//  constrainedSize:表示一个自定义的node里的子元素可以设置的最大和最小的size
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize;
上一篇 下一篇

猜你喜欢

热点阅读