gpt4 book ai didi

ios - UICollectionViewController Insets 无法正确调整和滚动

转载 作者:行者123 更新时间:2023-11-28 07:26:27 25 4
gpt4 key购买 nike

我正在尝试将 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

最佳答案

问题

UICollectionView 的一部分在您的键盘下方。

解决方案

您需要在 UICollectionViewkeyboardDidShowNotification 上的 super View 之间增加底部约束,并在 keyboardWillHideNotification 上缩小它。

一步一步

  • UICollectionView 和它的 super View 之间的底部约束保存为 UIViewController 类中的属性
  • keyboardDidShowNotification 上将其高度更改为键盘大小
  • keyboardWillHideNotification 上将其高度更改为 0

如果您子类化 CollectionViewController

更改 scrollInset 属性而不是底部约束。

collectionView.contentInset = UIEdgeInsetsMake(0, 0, 300, 0);

设置您从通知中获得的键盘高度而不是 300。

如果您想要从 CollectionViewController 转移并稍后重新创建行为,请按以下步骤进行操作

  • 改用UIViewController
  • 手动添加UICollectionView
  • 手动添加约束,将底部的约束保存为 UIViewController 的子类的属性
  • UICollectionViewdelegatedataSource 属性设置为 self
  • 使用协议(protocol)一致性扩展您的 UIViewController(默认情况下为 CollectionViewController 设置)
  • 重复步骤

关于ios - UICollectionViewController Insets 无法正确调整和滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com