如何设置自定义 inputView 的高度?

Posted

技术标签:

【中文标题】如何设置自定义 inputView 的高度?【英文标题】:How can I set height of custom inputView? 【发布时间】:2015-10-21 14:13:27 【问题描述】:

我有一个UITextField,我将inputView 设置为自定义视图。它的标准高度为 216。我想将其设置为 300 或屏幕的一半。

使用约束不是一个选项,因为它与默认的 216 冲突并且它会丢弃我的约束。

设置框架也不起作用。

有没有办法把它设置为更高的值?

【问题讨论】:

【参考方案1】:

您需要子类化UIInputView 并覆盖allowsSelfSizing 以获得返回值true,像这样

class MyInputView: UIInputView 
// ... other code
    override var inputViewStyle: UIInputViewStyle  get  return .default  
    override var allowsSelfSizing: Bool  get  return true  set 
// ... other code

【讨论】:

这是问题的真正答案。荣誉。 这是正确的做法,只需确保您的输入视图已定义具有约束的高度。 (在我的例子中,我引入了子视图的高度限制以及它们之间的垂直距离和视图边界)【参考方案2】:

我通过将autoResizingMask 设置为None,并将frame 设置为所需的帧(使用UIScreen.mainScreen 来获取屏幕的宽度)来使其工作。我在layoutSubviews 被调用之前做了这两件事。

【讨论】:

你用的是UIInputview还是UIView 我想我用的是 UIView,但这是 4 年前,所以我可能错了 我尝试过使用 UIView.. 它没有用...如果你能回忆一下就好了 ;)【参考方案3】:

像这样设置 customInputView 的框架,对我有用。

datePicker.frame = CGRect(x: view.frame.minX, y: view.frame.maxY - 250, width: view.frame.width, height: 250)

这里我使用 datePicker 作为我的 textField 的 inputView。

【讨论】:

【参考方案4】:

既然你提到你想在你的Reddit thread about this 中使用自动布局,有几个选项。澄清一下,您有一个 UITextField 并且您正在以编程方式将其 inputView 设置为自定义视图?您是否尝试根据屏幕/窗口高度以编程方式更改视图的高度?

如果您想使用 AutoLayout,那么约束几乎是您唯一的选择。正如您所发现的,仅尝试更新视图的 Frame 不会做任何事情,因为它会支持预设约束。您需要做的是更改UITextField 的高度约束的constant 值。

首先,您需要在 Interface Builder 中向 UITextField 添加高度约束。您可以通过单击 IB 窗口右下角的约束按钮来做到这一点:

然后只需选中 Height 框,输入您想要的任何值,然后点击 Add Constraints

现在您需要在 ViewController 中获取对该约束的引用。首先,在 Assistant Editor 中打开相关 VC 的标题。然后,在屏幕左侧的 Scene Navigator 中找到有问题的约束,右键单击它,然后将其拖到您的标题中,就像任何其他 IBOutlet 一样。

现在,在您的代码中,您将引用该视图的高度约束,您可以使用constrant.constant = 100; 或您想要使用的任何值对其进行更新。之后不要忘记致电[[self view] layoutSubviews] 让操作系统知道它需要更新布局。

我知道这几乎是我发现以编程方式可靠地更新约束和布局的唯一方法。希望它也对你有用。

【讨论】:

我想你误会了,我想改变我的inputView本身(键盘)的高度。 啊,是的,我的错。您是否尝试过为您的自定义 inputView 更新 autoresizingMask 值?请参阅here 和here 以供参考。【参考方案5】:

您可以使用自动布局来实现,而无需继承 UIInputView。只是一个普通的 UIView 就可以了。在您的子类中,您必须添加以下内容:

class CustomView: UIView 

override var intrinsicContentSize: CGSize 
    CGSize(width: UIView.noIntrinsicMetric, height: 300)



【讨论】:

以上是关于如何设置自定义 inputView 的高度?的主要内容,如果未能解决你的问题,请参考以下文章

自定义 inputView 在模态演示期间未正确设置动画

UITextField 自定义 InputView - 如何让 textFieldShouldReturn 触发?

在警报级别窗口中具有自定义 inputView 的 UIControl

在全局范围内将自定义输入视图设置为所有textFields的最简单方法

Swift 中的自定义输入视图

ios添加自定义inputView