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

时间:2015-10-21 14:13:27

标签: uitextfield nslayoutconstraint inputview

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

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

设置框架也不起作用。

有没有办法将其设置为更高的值?

4 个答案:

答案 0 :(得分:10)

您需要子类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
}

答案 1 :(得分:9)

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

答案 2 :(得分:0)

由于您提到要在Reddit thread about this中使用AutoLayout,因此有几个选项。只是为了澄清一下,你有一个UITextField并且你正在以编程方式将它的inputView设置为自定义视图?您是否尝试根据屏幕/窗口高度以编程方式更改视图的高度?

如果您想使用AutoLayout,那么约束几乎是您唯一的选择。只是尝试更新视图的框架将不会执行任何操作,因为它会支持预设约束,如您所发现的那样。您需要做的是更改constant高度限制的UITextField值。

首先,您需要在Interface Builder中向UITextField添加高度约束。您可以通过单击IB窗口右下角的约束按钮来执行此操作: Add Constraint UI

然后只需选中高度框,输入您想要的任意值,然后点击添加约束

现在您需要在ViewController中获得对该约束的引用。首先,在Assistant Editor中打开相关VC的标题。然后,在屏幕左侧的“场景导航器”中找到有问题的约束,右键单击它,然后将其拖动到标题中,就像处理任何其他IBOutlet一样。

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

我知道这几乎是我找到以编程方式可靠地更新约束和布局的唯一方法。希望它也适合你。

答案 3 :(得分:0)

像这样设置customInputView的框架对我来说很有效。

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

在这里,我已将datePicker用作textField的inputView。