以下是翻译的结果:
这里有一个示例项目,用于演示下面的问题:https://github.com/markdorison/UITextFieldContentSizeExample/
我试图使用自动布局使UITextField根据其包含的文本内容增加/减少宽度。我已经创建了一个优先级为749(而不是默认值1000)的前导和后续约束条件。我还尝试将这些约束条件的优先级降低到1,但这似乎对行为没有显着影响。
通过监听UIControlEventEditingChanged事件,我会触发intrinsicContentSize的重置:
- (IBAction)textFieldDidChange:(UITextField *)textField {
[UIView animateWithDuration:0.1 animations: ^{
[textField invalidateIntrinsicContentSize];
}];
}
这种方法几乎可以实现目标。但有两个问题:
我设置了一个占位符。无论占位符有多宽,UITextField的intrinsicContentSize的宽度都不会低于它。所以,如果占位符的宽度为130,当我开始输入时,文本视图的宽度将保持在130,直到我的输入达到大于130的宽度,此后文本视图将增长。
在我的示例中,我在UITextView下方放置了一个UITextField。当我在UITextField中输入时,它的宽度按预期增长。然后我可以点击UITextView并编辑文本。如果我再回去编辑UITextView,则其宽度不再像预期那样增长/缩小。UITextField的intrinsicContentSize属性返回的值从标准整数变成了类似
{191.536, 27.959999}
这样的浮点数。
如有帮助,将不胜感激!