ASLayoutSpec Class Reference

Inherits from NSObject
Conforms to ASLayoutable
Declared in ASLayoutSpec.h

Overview

A layout spec is an immutable object that describes a layout, loosely inspired by React.

  isMutable

Creation of a layout spec should only happen by a user in layoutSpecThatFits:. During that method, a layout spec can be created and mutated. Once it is passed back to ASDK, the isMutable flag will be set to NO and any further mutations will cause an assert.

@property (nonatomic, assign) BOOL isMutable

Declared In

ASLayoutSpec.h

  parent

Parent of the layout spec

@property (nullable, nonatomic, weak) id<ASLayoutable> parent

Declared In

ASLayoutSpec.h

– setChild:

Adds a child to this layout spec using a default identifier.

- (void)setChild:(id<ASLayoutable>)child

Parameters

child

A child to be added.

Discussion

Every ASLayoutSpec must act on at least one child. The ASLayoutSpec base class takes the responsibility of holding on to the spec children. Some layout specs, like ASInsetLayoutSpec, only require a single child.

For layout specs that require a known number of children (ASBackgroundLayoutSpec, for example) a subclass should use this method to set the “primary” child. This is actually the same as calling setChild:forIdentifier:0. All other children should be set by defining convenience methods that call setChild:forIdentifier behind the scenes.

Declared In

ASLayoutSpec.h

– setChild:forIndex:

Adds a child with the given identifier to this layout spec.

- (void)setChild:(id<ASLayoutable>)child forIndex:(NSUInteger)index

Parameters

child

A child to be added.

index

An index associated with the child.

Discussion

Every ASLayoutSpec must act on at least one child. The ASLayoutSpec base class takes the responsibility of holding on to the spec children. Some layout specs, like ASInsetLayoutSpec, only require a single child.

For layout specs that require a known number of children (ASBackgroundLayoutSpec, for example) a subclass can use the setChild method to set the “primary” child. It should then use this method to set any other required children. Ideally a subclass would hide this from the user, and use the setChild:forIndex: internally. For example, ASBackgroundLayoutSpec exposes a backgroundChild property that behind the scenes is calling setChild:forIndex:.

Declared In

ASLayoutSpec.h

– setChildren:

Adds childen to this layout spec.

- (void)setChildren:(NSArray<id<ASLayoutable> > *)children

Parameters

children

An array of ASLayoutable children to be added.

Discussion

Every ASLayoutSpec must act on at least one child. The ASLayoutSpec base class takes the reponsibility of holding on to the spec children. Some layout specs, like ASStackLayoutSpec, can take an unknown number of children. In this case, the this method should be used. For good measure, in these layout specs it probably makes sense to define setChild: and setChild:forIdentifier: methods to do something appropriate or to assert.

Declared In

ASLayoutSpec.h

– child

Returns the child added to this layout spec using the default identifier.

- (nullable id<ASLayoutable>)child

Declared In

ASLayoutSpec.h

– childForIndex:

Returns the child added to this layout spec using the given index.

- (nullable id<ASLayoutable>)childForIndex:(NSUInteger)index

Parameters

index

An identifier associated withe the child.

Declared In

ASLayoutSpec.h

– children

Returns all children added to this layout spec.

- (nullable NSArray<id<ASLayoutable> > *)children

Declared In

ASLayoutSpec.h