【问题标题】:Resize UITextField horizontally with text using Auto Layout使用自动布局使用文本水平调整 UITextField 的大小
【发布时间】: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];
    }];
}

这种方法几乎有效。有两个问题:

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

  2. 在我的示例中,我在 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


【解决方案1】:

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

我认为您必须使用 UITextField 子类,可以在其中设置 instrinsicContentSize,覆盖 intrinsicContentSize 方法的默认行为,这显然是基于占位符的大小.

【讨论】:

  • 这是我找到的最好/唯一的解决方案。特别是用return self.isEditing ? [super.text sizeWithAttributes:self.typingAttributes] : [super intrinsicContentSize];覆盖intrinsicContentSize
  • 如何为 UITextView 执行此操作?好像没有intrinsicContentSize 方法。
  • @KatedralPillon 请不要通过 cmets 劫持。如果您有问题,请将其作为问题提出
  • 我刚刚问了一个问题:stackoverflow.com/questions/28129799/…
猜你喜欢
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 2014-05-22
  • 2014-08-19
  • 2019-09-07
相关资源
最近更新 更多