一个例子项目来演示以下问题文本可以在这里找到:https://github.com/markdorison/UITextFieldContentSizeExample/调整大小的UITextField水平与使用自动布局
我试图有一个的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}
。
任何帮助,将不胜感激!
你有没有解决这个问题?我发现对于问题2,UITextField只有在焦点空时才能正确调整大小。如果字段中已有任何文本,instrinsicContentSize在UIControlEventEditingChanged上根本不会改变。 –
@ChristopherCamps你刚刚救了我几个小时。感谢您的评论! –
@Rudolf Adamkovic,你是如何解决它的? – gabbler