键盘出现时防止对 UICollectionView 进行任何更改

Posted

技术标签:

【中文标题】键盘出现时防止对 UICollectionView 进行任何更改【英文标题】:Prevent ANY change to UICollectionView when keyboard shows up 【发布时间】:2018-10-03 12:41:24 【问题描述】:

我和我的UICollectionView 争吵了将近 2 天,在互联网上找不到太多有用的信息。通常,当键盘弹出时,人们确实希望滚动某些东西。 我想要完全相反的!

情况:常规的、普通的 UIView 加上 UICollectionView 作为子视图。然后,在某个事件中(点击navigationbar 的按钮),将添加一个新的子视图,其中包含UITextView

无论出于何种原因,留在这个全新视图下方的 collectionView 认为,当我单击提到的 textView 时,它必须进行一些奇怪的上下滚动,以及关于损坏的 约束 的大量错误!

我只想让它保持原样,而不是改变任何东西!它甚至不可见(因为它上方是一个全新的视图,对吧)。

编辑: 我的限制如下:

addConstraintsWithFormat(format: "H:|[v0]|", views: collectionView)
addConstraintsWithFormat(format: "H:|[v0]|", views: navBar)
addConstraintsWithFormat(format: "V:|-20-[v0(44)][v1]|", views: navBar, collectionView)

这是创建和添加子视图的方式:

let view = UIView(frame: CGRect(x: frame.width, y: 0, width: frame.width, height: frame.height))
addSubview(view)
UIView.animate(withDuration: 0.4) 
    view.center.x -= self.frame.width

部分控制台输出:

0x10a835a00; frame = (0 0; 375 617); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x1c405f0b0>; layer = <CALayer: 0x1c4220640>; contentOffset: 0, 0; contentSize: 1500, 617; adjustedContentInset: 0, 0, 208, 0>

它添加了 208 的底部内容插图,我不知道为什么..

提前感谢您! 戴夫

【问题讨论】:

你能添加一些图片和使用的约束吗? 约束都在代码中。我现在添加它们。 (我不使用情节提要) 您是否将集合视图添加到视图中?? @ioser 是的,确定 ???? 假设您有两个视图。我们将此称为基本视图 - 我们将向其添加集合视图 现在还有另一个视图,我们将其称为顶部视图 - 我们将向其添加 UITextfield。现在我们将这两个视图都添加到 VC 的 self.view 中。牢记子视图的层次结构。一旦键盘显示您只更改 TopView 而不是 self.view 的中心 x 值。你确定你也在做同样的事情吗 【参考方案1】:

解决方案是将“最外层”控制器(包括反过来控制自己的 collectionViews 的视图)从 UICollectionViewController 切换到具有 lazy var collectionView 子视图的常规 ViewController 并使其符合所有 UICollectionViewController 属性。 所以这不是我遇到问题的集合视图的控制器,它与那些单元格没有真正的关系。 在我的书中,这本质上是一个 UICollectionViewController,所以不知道为什么会这样,但确实如此。 孩子们,一切都坚持使用 UIViewControllers 和 UIViews :D 所有那些花哨的 Apple 创造的专门的东西有时往往是错误的......

【讨论】:

以上是关于键盘出现时防止对 UICollectionView 进行任何更改的主要内容,如果未能解决你的问题,请参考以下文章

防止 UICollectionView 中每个 UICollectionViewCell 中的内容在我滚动时发生变化?

键盘出现时防止用户界面移动

无法在UIInputViewController中使用UICollectionView进行键盘扩展

如何防止键盘出现在自定义警报视图上

UICollectionView 的 UICollectionReusableView 防止/阻止对 UICollectionViewCell 的点击

Swift 防止 TabBar 在键盘处于活动状态时向上移动