【发布时间】:2014-02-28 21:45:47
【问题描述】:
可以在此处找到演示以下问题的示例项目:https://github.com/markdorison/UITextFieldContentSizeExample/
我正在尝试使用自动布局让 UITextField 使用其包含的文本内容来增大/缩小其宽度。我创建了优先级为 749 的前导和尾随约束(而不是默认值:1000)。我还尝试将这些约束的优先级一直降低到 1,但这似乎对行为没有明显影响。
通过监听 UIControlEventEditingChanged 事件,我触发了内在内容大小的重置:
- (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,你是怎么解决的?
标签: cocoa-touch ios7 uitextfield autolayout