如何在使用 Texture 的同时实现 List CollectionViewLayout?

How to implement the ListCollectionViewLayout while using Texture?

我一直无法让 ListCollectionViewLayout(IGListKit 提供的库存布局)与 Texture(以前称为 AsyncDisplayKit)一起工作。

这是我的集合视图控制器:

let collectionNode: ASCollectionNode!
var refreshControl : UIRefreshControl?
var layout: ListCollectionViewLayout

var pageTitle: String?

var feedItems: [FeedItem] = [FeedItem]()

lazy var adapter: ListAdapter = {
    return ListAdapter(updater: ListAdapterUpdater(), viewController: self, workingRangeSize: 1)
}()

init() {
    layout = ListCollectionViewLayout.init(stickyHeaders: false, scrollDirection: .vertical, topContentInset: 0, stretchToEdge: false)
    self.collectionNode = ASCollectionNode(collectionViewLayout: layout)
    super.init(node: self.collectionNode)
    self.adapter.setASDKCollectionNode(self.collectionNode)
    self.adapter.dataSource = self
    self.collectionNode.alwaysBounceVertical = true
    refreshControl = UIRefreshControl()
    refreshControl?.addTarget(self, action: #selector(refreshContent), for: .valueChanged)
    self.collectionNode.view.addSubview(refreshControl!)

}

这是科长:

class HashtagSectionController: ListSectionController, ASSectionController {

weak var delegate: HashtagDataDelegate?
var pushViewDelegate: PushViewControllerDelegate?
var pushUserDelegate: PushUsernameDelegate?
var isLoading: Bool

func nodeForItem(at index: Int) -> ASCellNode {
    guard let feedItem = object else { return ASCellNode() }

    let node = DiscoverCellNode(post: feedItem.post, user: feedItem.user)
    DispatchQueue.main.async {
        node.contentNode.delegate = self
    }
    return node
}

override init() {
    self.isLoading = false
    super.init()
    self.inset = UIEdgeInsets(top: 10, left: 0, bottom: 20, right: 0)
}

var object: FeedItem?

func nodeBlockForItem(at index: Int) -> ASCellNodeBlock {
    guard let feedItem = object else { return {
        return ASCellNode()
        }
    }
    return {
        let node = DiscoverCellNode(post: feedItem.post, user: feedItem.user)
        DispatchQueue.main.async {
            node.contentNode.delegate = self
        }
        return node
    }
}

override func numberOfItems() -> Int {
    return 1
}

override func didUpdate(to object: Any) {
    self.object = object as? FeedItem
}

override func didSelectItem(at index: Int) {
    guard let feedItem = object else { return }
    pushViewDelegate?.pushViewController(post: feedItem.post, user: feedItem.user)
}

override func sizeForItem(at index: Int) -> CGSize {
    return ASIGListSectionControllerMethods.sizeForItem(at: index)
    //return CGSize(width: 120, height: 120)
}

override func cellForItem(at index: Int) -> UICollectionViewCell {
    return ASIGListSectionControllerMethods.cellForItem(at: index, sectionController: self)
}

}

所以我不确定为什么这不起作用。我是否缺少 ListCollectionLayout 工作所需的委托。我收到一条错误消息 "layoutSize is invalid and unsafe to provide to CoreAnimation".

我最终没有使用 listkit,而是决定只使用纹理集合视图的差异算法。