1

使用嵌套ASStackLayoutSpec的 AsyncDisplayKit 我试图实现这一点

在此处输入图像描述

所以我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)
}

但结果不是我所期望的

在此处输入图像描述

看起来文本到无穷大,没有正确换行。时间戳也可能在右边很远的地方。

我尝试了不同的组合,.alignItems.justifyContent我无法让它工作。

4

2 回答 2

1

试试这些属性:

contentStackSpec.style.flexShrik = 1
messageNode.style.flexShrik = 1
contentStackSpec.children = [headerStackSpec, messageNode]
于 2018-07-14T06:41:43.660 回答
0

您需要width在方法中设置您的消息节点layoutSpecThatFits

let messageWidth = UIScreen.main.bounds - (leftSpacing + rightSpacing)
message.style.width = ASDimension(unit: .points, value: messageWidth)
于 2018-07-12T08:29:34.133 回答