【问题标题】:iOS puts a required height constraint on custom keyboardiOS 在自定义键盘上设置了所需的高度限制
【发布时间】:2017-08-01 01:57:01
【问题描述】:

我正在尝试为 UITextField 创建自定义键盘。这不是系统扩展;它仅在我的应用程序中。

myTextField.inputView = CustomKeyboard()

CustomKeyboard 类具有子视图和自动布局约束,它们需要比通常的系统键盘高一点的高度。这会导致错误,因为系统正在添加必需的customKeyboard.height == 216 约束。

我如何告诉它不要添加这个约束?它被添加到CustomKeyboardsuperview 中的约束数组中。

(lldb) po type(of: self)
MyApp.CustomKeyboard    
(lldb) po self.superview!.constraints[0]
<NSLayoutConstraint:0x17428ab40 MyApp.CustomKeyboard:0x100d37580.height == 216   (active)>

【问题讨论】:

  • 输入视图高度由系统强加。你不应该试图颠覆它。你需要你的约束来处理这个,而不是反对它。
  • 这是否记录在某处?我之所以问是因为我在其他地方看到了一些声明,这些声明听起来像是有些人从自定义键盘中获得了更高的高度。 (也许以前的 iOS 版本?)
  • 带有自定义键盘。但这只是一个输入视图。
  • 我想一个相关的问题是:可以制作自定义键盘并将其保密给他们的应用程序吗?

标签: ios autolayout uitextfield custom-keyboard


【解决方案1】:

我从 Apple 开发者支持处得到了答复。我已经实现了这个并且它有效。他们是这样说的:

如果您的inputView 正在使用自动布局并且有足够的约束使其可以确定自己的高度(在您的示例项目中就是这种情况),那么您只需在输入视图中覆盖intrinsicContentSize并返回一个高度为 not UIViewNoIntrinsicMetricCGSize。例如,这样做:

override var intrinsicContentSize: CGSize {
    return CGSize(width: UIViewNoIntrinsicMetric, height: 0)
}

【讨论】:

  • 请注意,当高度为0 时,当关闭键盘时它不会动画键盘向下。最好为它设置一个计算高度
【解决方案2】:

很遗憾,您没有显示自定义键盘代码。但这里的问题很可能是它不是 UIInputView 子类。使其成为 UIInputView 子类,现在您可以设置它的框架;原点和宽度将被忽略,但高度将被遵守。确保您的 UIInputView 的内部约束不与此高度冲突。

【讨论】:

  • 我尝试了一些东西。设置框架或制作基类 UIInputView 起初没有效果。然后我停止在我的 CustomKeyboard 视图上设置translatesAutoresizingMaskIntoConstraints = false,并且现在将一个框架传递给 init 有一些效果。你认为这应该与translatesAutoresizingMaskIntoConstraints == false 一起使用吗?这就是我一直对以编程方式创建的视图所做的事情,因为我喜欢使用自动布局。这似乎很奇怪。我可以在这里使用我的一张 Apple 技术支持票。
猜你喜欢
  • 2017-01-30
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2019-08-23
  • 1970-01-01
  • 2014-12-11
  • 2019-04-09
相关资源
最近更新 更多