我正在使用Swift编写macOS消息客户端。我使用带有NSCollectionView的NSScrollView作为documentView来呈现消息。目前,我已经实现了无限滚动,但是现在的问题是collectionView从顶部开始加载单元格,然后向下加载-这是NSCollectionView的默认行为。取而代之的是,我需要它从底部开始并逐步提高-一种典型的消息传递应用程序显示消息的方式。
我尝试过的解决方案:
wantsLayer = true
layer!.setAffineTransform(CGAffineTransform(rotationAngle: .pi))
updateLayer()
setNeedsDisplay(frameRect)
的事情。再次没有可见的影响。使NSCollectionView从底部移到顶部的最佳方法是什么?顺便说一句,我不使用情节提要。
答案 0 :(得分:0)
您好,@我不确定该代码是否对您有所帮助,因为我已将其用于iPhone聊天应用程序,并且对我有用。就我而言,我只是将collectionView放在视图控制器中。
//MARK:- View Controller life cycle method
override func viewDidLoad() {
chatCollectionView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if(keyPath == "contentSize"){
if let newvalue = change?[.newKey] {
let contentHeight: CGFloat = chatCollectionView.contentSize.height
let collectionHeight = chatCollectionView.frame.size.height
if contentHeight < collectionHeight {
var insets: UIEdgeInsets = chatCollectionView.contentInset
insets.top = collectionHeight - contentHeight
chatCollectionView.contentInset = insets
} else {
chatCollectionView.contentInset = .zero
}
}
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
chatCollectionView.removeObserver(self, forKeyPath: "contentSize")
}