代码之家  ›  专栏  ›  技术社区  ›  Igor Kulman

使用AsyncDisplayKit包装嵌套的AsstackLayoutSpec

  •  1
  • Igor Kulman  · 技术社区  · 7 年前

    使用嵌套 ASStackLayoutSpec 使用AsyncDisplayKit,我正在尝试实现

    enter image description here

    所以我创建了一个垂直 asstacklayoutspec公司 有阿凡达和另一个水平 asstacklayoutspec公司 带有用户名、时间戳和文本

    override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
        // HEADER with username and timestamp
        let spacer = ASLayoutSpec()
        spacer.style.flexGrow = 1
        let headerStackSpec = ASStackLayoutSpec.horizontal()
        headerStackSpec.spacing = 2
        headerStackSpec.alignItems = .baselineFirst
        headerStackSpec.children = [userNode, spacer, timestampNode]
    
        // CONTENT - HEADER and text
        let contentStackSpec = ASStackLayoutSpec.vertical()
        contentStackSpec.spacing = 2
        contentStackSpec.children = [headerStackSpec, messageNode]
    
        // MAIN - avatar and CONTENT
        let mainStackSpec = ASStackLayoutSpec.horizontal()
        mainStackSpec.spacing = 9
        mainStackSpec.children = [avatarNode, contentStackSpec]
    
        return ASInsetLayoutSpec(insets: UIEdgeInsets(top: 2, left: 10, bottom: 2, right: 10), child: mainStackSpec)
    }
    

    但结果不是我所期望的

    enter image description here

    看起来文本是无限的,没有适当的包装。时间戳也可能在右边的某个很远的地方超出了界限。

    我尝试了不同的组合 .alignItems .justifyContent 但我不能让它工作。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Bimawa    7 年前

    尝试以下属性:

    contentStackSpec.style.flexShrik = 1
    messageNode.style.flexShrik = 1
    contentStackSpec.children = [headerStackSpec, messageNode]
    
        2
  •  0
  •   Nishu_Priya    7 年前

    你需要设置 width 方法中的消息节点 layoutSpecThatFits 以下内容:

    let messageWidth = UIScreen.main.bounds - (leftSpacing + rightSpacing)
    message.style.width = ASDimension(unit: .points, value: messageWidth)