我正在学习AsyncDisplayKit/Texture。我正在尝试ASTableNode
使用自定义单元格创建一个。
我正在努力了解如何正确设置和锚定我在ExampleNode
.
我试过这个
override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
let stack = ASStackLayoutSpec.vertical()
stack.children = textNode
return stack
}
但是有错误
无法将类型“ASTextNode”的值分配给类型“[ASLayoutElement]?”
然后我更新layoutSpecThatFits
了
override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
return ASStackLayoutSpec(
direction: .horizontal,
spacing: 16,
justifyContent: .start,
alignItems: .center,
children: [textNode]
)
}
但这将文本撞到了单元格的左侧。根本没有应用间距。
我正在努力寻找一个体面的使用指南,所以如果答案很明显,请原谅我。
使用以下类将节点添加到单元格的正确方法是什么?
import AsyncDisplayKit
final class FeedNodeController: ASViewController<ASDisplayNode> {
var tableNode: ASTableNode {
return node as! ASTableNode
}
private lazy var tableNodeProvider = FeedTableNodeProvider()
init() {
super.init(node: ASTableNode())
tableNode.delegate = tableNodeProvider
tableNode.dataSource = tableNodeProvider
tableNode.view.tableFooterView = UIView()
}
required init?(coder aDecoder: NSCoder) {
return nil
}
}
class FeedTableNodeProvider: NSObject {
private let feed = ["Foo", "Bar", "Boo", "Baz"]
}
extension FeedTableNodeProvider: ASTableDataSource, ASTableDelegate {
func numberOfSections(in tableNode: ASTableNode) -> Int {
return 1
}
func tableNode(_ tableNode: ASTableNode, nodeBlockForRowAt indexPath: IndexPath) -> ASCellNodeBlock {
let node = { [unowned self] () -> ASCellNode in
return ExampleNode(text: self.feed[indexPath.row])
}
return node
}
func tableNode(_ tableNode: ASTableNode, numberOfRowsInSection section: Int) -> Int {
return feed.count
}
}
class ExampleNode: ASCellNode {
private lazy var textNode: ASTextNode = {
let node = ASTextNode()
node.backgroundColor = .blue
return node
}()
init(text: String) {
super.init()
textNode.attributedText = NSAttributedString(string: text)
backgroundColor = .purple
addSubnode(textNode)
}
override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
return ASStackLayoutSpec(
direction: .horizontal,
spacing: 16,
justifyContent: .start,
alignItems: .center,
children: [textNode]
)
}
}