我试图将UICollectionViewControlller和inputAccessoryView一起用于聊天页面。我使用以下代码尝试将collectionViewController滚动到最后一个单元格。
self.collectionView.scrollToItem(at: [0, self.messages.count - 1], at: .bottom, animated: true)
以及涉及键盘的情况
NotificationCenter.default.addObserver(self, selector: #selector(self.handleKeyboardShow), name: UIResponder.keyboardDidShowNotification, object: nil)
@objc func handleKeyboardShow() {
print("keyboard was called \(messages.count - 1)")
self.collectionView.scrollToItem(at: [0, messages.count - 1], at: .bottom, animated: true)
}
这似乎无法正常工作,实际的可滚动区域似乎太小,因为打开键盘时,我什至无法手动滚动到最新的单元格。
这是一个示例视频 LINK
答案 0 :(得分:0)
问题
UICollectionView
的一部分进入了键盘下方。
解决方案
您需要增加UICollectionView
和keyboardDidShowNotification
上的视图之间的底部约束,并缩小keyboardWillHideNotification
上的视图。
逐步
UICollectionView
和其超级视图之间的底部约束保存为UIViewController
类中的一个属性keyboardDidShowNotification
上将其高度更改为键盘大小keyboardWillHideNotification
上将其高度更改为0 如果您将CollectionViewController子类化
更改scrollInset
属性,而不是底部约束。
collectionView.contentInset = UIEdgeInsetsMake(0, 0, 300, 0);
从通知中设置键盘高度,而不是300。
如果您想从CollectionViewController移出并稍后再创建行为,请按以下步骤操作
UIViewController
UICollectionView
UIViewController
的子类的属性UICollectionView
的{{1}}和delegate
属性设置为dataSource
self
(默认情况下,它是为CollectionViewController设置的)