如何在键入时将UITextField宽度调整为文本?

时间:2016-12-16 15:30:26

标签: ios swift storyboard uitextfield

我有一个UITextField,旁边有一个标签,上面写着"米"。这个想法是你可以在文本字段中键入一个数字,然后单词" meter"将显示在它旁边。文本字段没有边框,因此当您不编辑文本字段时,它将看起来像一行文本。

为此,我需要将文本字段的宽度作为文本的宽度。所以当你输入时它需要变宽。但是,键入时不会发生这种情况。但是,如果您旋转设备,则尺寸会根据内容进行调整。所以基本上我需要在你旋转时触发任何触发来获得我想要的东西。

我在UIControlEvents.editingChanged方法中尝试过很多内容,例如setNeedsLayoutsetNeedsDisplaylayoutSubViews()setNeedsUpdateConstraints(),但没有运气。< / p>

另一种方法是使用sizeToFit(),然后将frame.size.width设置为文本字段的宽度约束。这确实有效,但只是第一次编辑。第二次编辑时,sizeToFit()总是以某种方式返回相同的内容。

有什么想法吗?

更新:我最终使用了不同的方法。我将文本字段设置为全宽,并将仪表标签放在其上面。在您键入时,它会计算文本的宽度,并且通过更改左约束常量,仪表标签会相应地向右移动。这样,标签始终位于输入的数字旁边。

我仍然没有找到一种方法来在你打字的情况下改变文字区域的宽度而不会操作所有的马车,但我不再需要它了。

1 个答案:

答案 0 :(得分:0)

我认为你应该在里面表现

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

此函数只决定是否应在TextField的contentView末尾添加新键入的字符。每次用户输入时都会调用此函数。

我认为UIControlEvents.editingChanged只会在textField获得焦点或失去焦点时通知您,而不会在值更改时通知您。