可以在此处找到演示以下问题的示例项目: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的宽度;在此之后,文本视图将会增长。
在我的示例中,我在UITextField下面放置了一个UITextView。当我输入UITextField时,其宽度按预期增长。然后我可以点击UITextView并编辑文本。如果我然后返回并编辑UITextView,它的宽度不再按预期增长/缩小。 UITextField的intrinsicContentSize属性返回的值从标准外观整数(如{192, 28}
)变为{191.536, 27.959999}
。
任何帮助将不胜感激!
答案 0 :(得分:6)
我正在设置一个占位符。无论占位符是多宽,UITextField的intrinsicContentSize的宽度都不会低于它。因此,如果占位符的宽度为130,并且我开始键入,则文本视图的宽度将保持为130,直到我输入的内容达到大于130的宽度;在此之后,文本视图将会增长。
我认为你必须使用一个UITextField子类,其中你设置instrinsicContentSize
,覆盖intrinsicContentSize
方法的默认行为,显然是大小基于占位符。