iOS 11 键盘和附件视图之间的额外空间

Posted

技术标签:

【中文标题】iOS 11 键盘和附件视图之间的额外空间【英文标题】:iOS 11 extra space between keyboard and accessoryView 【发布时间】:2018-05-06 20:27:39 【问题描述】:

inputAccessoryView 和键盘有一些奇怪的 UI 错误。 在viewDidLoad中添加inputAccessoryView的代码

        let keyboardToolbar = UIToolbar()
    keyboardToolbar.items = [
        UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
        UIBarButtonItem(title: "Hide", style: .done, target: self, action: #selector(resignFirstResponder))
    ]

    keyboardToolbar.barStyle = barStyle
    keyboardToolbar.sizeToFit()

    myTextfield.inputAccessoryView = keyboardToolbar

第一次进入屏幕并点击文本字段效果很好。 关闭此屏幕(popViewController)并再次输入并获得对 textField 的关注后,我得到了这个: UIToolBar 位于键盘上方。空白处有高度 = 键盘高度

用户界面错误图片

【问题讨论】:

尝试为你的UIToolBar指定框架:let keyboardToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 40)) 没有帮助。还尝试用自定义 UIView 替换 UIToolBar - 同样的错误 这个功能你自己实现了吗[resignFirstResponder]? 【参考方案1】:

这是因为 ios 11 中有安全区域,而这个空间出现在 iphone X 上

检查此帖子可能重复

iPhone X how to handle View Controller inputAccessoryView?

【讨论】:

在我的情况下出现了一些不同的问题,因为第一次出现的键盘看起来都很好。在一个错误导致工具栏的按钮“隐藏”位于那里之后,它应该是这样的,所以我可以点击键盘上方的空白区域并隐藏调用。看起来只是 UI 渲染问题 什么代码?我试过 layoutIfNeeded() 和 setNeedsDisplay()。没用 您在 Viewdidload 中添加此代码的位置,以前的代码与我一起使用没有任何错误 我有很多元素,屏幕生命周期中的动画很少,textField 上的响应式(rxswift)。所以我猜这不是一个常见的错误。 可以单独尝试,确保不受约束【参考方案2】:

我不知道原因,但解决方法是调用任何一个

view.endEditing

textField.resignFirstResponder()

viewWillDisappear

【讨论】:

以上是关于iOS 11 键盘和附件视图之间的额外空间的主要内容,如果未能解决你的问题,请参考以下文章

iOS图表,删除底部xAxis标签创建的额外空间

运行时滚动视图中的额外空间(插图)

layoutAnimation 在两个视图之间切换时会在 Android 上导致额外的蓝色背景

自 IOS 8 以来使用自动布局和滚动视图的额外顶部空白

当视图是多行时,约束布局如何摆脱 textview 上的额外空间

StackView 在一个元素周围添加额外的空间