iOS UITextField自动调整大小以符合内容

9
如何在iOS中设置文本框的自动调整大小?
你好,看一下这个示例helloWorld.m: self.TextFieldExample.text = @"HELLO WORLD HELLO WORLD HELLO WORLD HELLO WORLD"; 当前显示为:

HELLO WORLD HELLO ...

正确显示应该是:

HELLO WORLD HELLO WORLD HELLO WORLD HELLO WORLD

在这种情况下,最佳实践是什么?

1
你的意思是类似于这篇帖子中的回答吗?https://dev59.com/U3VD5IYBdhLWcg3wNY1Z - Chris
不清楚。您是希望文本字段使用较小的字体以适应其宽度,还是希望文本字段变得更宽以适应其文本? - rmaddy
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - reizintolo
rmaddy,我想要一个像Android组件中的多行文本字段。 - reizintolo
我认为最好的解决方案是使用UITextField,但我希望根据内容自动调整高度,无论是2行还是5行,是否有什么办法? - reizintolo
4个回答

7

您需要添加一个由textField类型的Editing Changed执行的操作,在此操作中,您应该添加[self.textField sizeToFit]; ,就像这样:

- (IBAction)textChanged:(UITextField *)sender {

    [self.textField sizeToFit];
}

这样,每当您的文本字段内容发生变化时,它将执行该操作并调整大小以适应您的文本长度。
如果您希望文本根据textField的宽度进行调整大小,可以在Storyboard的属性检查器中完成: http://i.stack.imgur.com/udVlk.png

1
这个问题是关于文本框而不是标签的。 - rmaddy
感谢您的回复,Santiago Fabregat。但是我的想法是实现多行文本,就像UITextView一样。我认为这是在这种情况下最好的解决方案。 - reizintolo

6

在UITextField中,文本必须适合一行,并且不能换行。

你有两个选项:

  1. 缩小字体以适应一行:

    self.TextFieldExample.adjustsFontSizeToFitWidth = YES; self.TextFieldExample.minimumFontSize = 10.0; //可选择指定最小字号

  2. 使用UITextView启用文本换行:

    请参阅此答案:如何创建多行UITextfield?

p.s. 根据样式指南,“属性应该是小写的驼峰命名法,第一个单词应该是小写的”,所以你应该将变量重命名为self.textFieldExample


BFar,谢谢您的回复,第二点是正确的方法,但您知道怎么样才能根据文本的数量自动增加高度吗? - reizintolo
失去焦点后再次尝试编辑文本框时,大小将设置为最小值=10。不幸的是,这个解决方案对我不起作用 :( - Fadi Abuzant

0
在我的情况下,我希望字体大小保持一致。我将textField宽度限制设置为“>=10”,在iOS 9、10、11上都能正常工作。
对于iOS 11,甚至在编辑文本时也能起作用。
为了使其在iOS 9和10中编辑文本时也能正常工作,我通过注册textDidChange事件处理了一个额外的方法。
//Swift 3 Sample

//In viewDidLoad
adjustableTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)


 @objc func textFieldDidChange(_ textField: UITextField) {
    adjustableTextField.resignFirstResponder()
    adjustableTextField.becomeFirstResponder()
}

-1

Swift:

self.TextFieldExample.adjustsFontSizeToFitWidth = true
self.TextFieldExample.minimumFontSize = 10.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接