Как реализовать ListCollectionViewLayout при использовании текстуры? - PullRequest
0 голосов
/ 26 сентября 2019

У меня возникли проблемы с получением ListCollectionViewLayout, стандартного макета, предоставляемого IGListKit, для совместной работы с текстурой (ранее 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 недопустим и небезопасен для предоставления в CoreAnimation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...