使用"自动布局"使用文本水平调整UITextField的大小

mar*_*son 9 cocoa-touch uitextfield autolayout ios7

可以在此处找到演示以下问题的示例项目:https://github.com/markdorison/UITextFieldContentSizeExample/

我试图让UITextField使用自动布局增加/缩小其包含的文本内容的宽度.我创建了优先级为749的前导和尾随约束(而不是默认值:1000).我也尝试将这些约束的优先级一直降低到1,但这似乎对行为没有明显的影响.

约束截图

通过监听UIControlEventEditingChanged事件,我触发了intrinsicContentSize的重置:

- (IBAction)textFieldDidChange:(UITextField *)textField {
    [UIView animateWithDuration:0.1 animations: ^{
        [textField invalidateIntrinsicContentSize];
    }];
}
Run Code Online (Sandbox Code Playgroud)

这种方法几乎可行.有两个问题:

  1. 我正在设置一个占位符.无论占位符是多宽,UITextField的intrinsicContentSize的宽度都不会低于它.因此,如果占位符的宽度为130,并且我开始键入,则文本视图的宽度将保持为130,直到我输入的内容达到大于130的宽度; 在此之后,文本视图将增长.

  2. 在我的例子中,我在UITextField下面放置了一个UITextView.当我输入UITextField时,其宽度按预期增长.然后我可以点击UITextView并编辑文本.如果我然后返回并编辑UITextView,它的宽度不再按预期增长/缩小.UITextField的intrinsicContentSize属性返回的值来自标准的整数,如{192, 28}to {191.536, 27.959999}.

任何帮助,将不胜感激!

mat*_*att 6

我正在设置一个占位符.无论占位符是多宽,UITextField的intrinsicContentSize的宽度都不会低于它.因此,如果占位符的宽度为130,并且我开始键入,则文本视图的宽度将保持为130,直到我输入的内容达到大于130的宽度; 在此之后,文本视图将增长.

我认为你必须使用的UITextField子那里去设置instrinsicContentSize,覆盖的默认行为intrinsicContentSize是明显的大小根据占位符方法.

  • 这是我发现的最好/唯一的解决方案.特别是用`return self.isEditing覆盖`intrinsicContentSize`?[super.text sizeWithAttributes:self.typingAttributes]:[super intrinsicContentSize];` (7认同)