如何在AsyncDisplayKit中设置节点布局

时间:2017-11-03 14:02:00

标签: ios swift asyncdisplaykit

我正在尝试为AsyncDisplayKit设置用于userProfile设置的节点的布局,但是没有获得所需的结果。

  1. 我有一个userProfile图片
  2. userName标签
  3. 设置按钮
  4. 帖子,评论和喜欢按钮 我想将所有节点设置为水平和垂直对齐
  5. 以下是layoutSpecThatFits方法

    中的代码
    override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
    
        photoNode.style.preferredSize = CGSize(width: ImageSize, height: ImageSize)
        settingButton.style.preferredSize = CGSize(width: 100, height: 50)
        label.style.preferredSize = CGSize(width: 100, height: 50)
        editbutton.style.preferredSize = CGSize(width: 120, height: 40)
    
        settingButton.style.alignSelf = .stretch
        let layout = ASStackLayoutSpec.horizontal()
        layout.alignItems = .center
        layout.justifyContent = .spaceAround
        layout.spacing = 10
    
        layout.children = [photoNode,settingButton]
       let settingButtonStackLocation = ASStackLayoutSpec(direction: .vertical,
                                            spacing: 15,
                                            justifyContent: .center,
                                            alignItems: .center,
                                            children: [layout,label,editbutton])
        settingButtonStackLocation.style.flexShrink = 1.0
        settingButtonStackLocation.style.flexGrow = 1.0
    
    
    
    
    
      let insets = UIEdgeInsets(top: 50, left: 30, bottom: 0, right: 30)
        let inset =  ASInsetLayoutSpec(insets: insets, child: settingButtonStackLocation)
    
        let horizontalButtonsStack = ASStackLayoutSpec.horizontal()
        horizontalButtonsStack.children = [postsButton,bucketButton,likesButton]
        horizontalButtonsStack.spacing = 20
        let verticalStack = ASStackLayoutSpec.vertical()
        verticalStack.children = [inset,horizontalButtonsStack]
        verticalStack.spacing = 10
        let buttonInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
        let buttonWithInsets = ASInsetLayoutSpec(insets: buttonInsets, child: verticalStack)
    
        let horizontalFollowersStack = ASStackLayoutSpec.horizontal()
        horizontalFollowersStack.children = [followersButton,followingButton]
        horizontalFollowersStack.spacing = 10
        let verticalFollowers = ASStackLayoutSpec.vertical()
        verticalFollowers.children = [buttonWithInsets,horizontalFollowersStack]
        verticalFollowers.spacing = 10
        verticalFollowers.alignItems = .center
    
        let followersInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
        let followersWithInsets = ASInsetLayoutSpec(insets: followersInsets, child: verticalFollowers)
    
    
        return followersWithInsets
     }
    

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案:

    [containerViewNode setLayoutSpecBlock:^ASLayoutSpec *(__kindof ASDisplayNode *node, ASSizeRange constrainedSize) {
        avatarImage.style.preferredSize = CGSizeMake(35, 35);
        settingsIcon.style.preferredSize = CGSizeMake(15, 15);
        ASCenterLayoutSpec *avatarCenterSpec = [[ASCenterLayoutSpec alloc] initWithHorizontalPosition:ASRelativeLayoutSpecPositionCenter verticalPosition:ASRelativeLayoutSpecPositionCenter sizingOption:ASRelativeLayoutSpecSizingOptionDefault child:avatarImage];
        avatarCenterSpec.style.flexBasis = ASDimensionMakeWithPoints(100);
        ASRelativeLayoutSpec *gearSpec = [[ASRelativeLayoutSpec alloc] initWithHorizontalPosition:ASRelativeLayoutSpecPositionEnd verticalPosition:ASRelativeLayoutSpecPositionStart sizingOption:ASRelativeLayoutSpecSizingOptionDefault child:settingsIcon];
        ASOverlayLayoutSpec *overlayLayoutSpec = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:avatarCenterSpec overlay:gearSpec];
        ASStackLayoutSpec *mainSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical spacing:0 justifyContent:ASStackLayoutJustifyContentCenter alignItems:ASStackLayoutAlignItemsStretch children:@[overlayLayoutSpec, textNodeStub]];
        return mainSpec;
    }];

查看ASOverlayLayoutSpec它如何与ASRelativeLayoutSpec一起使用。我在github分享的示例项目。