根据内容调整文本框大小。

13

在使用 Swift 编写的 iOS 应用中,如何在使用自动布局时根据内容调整文本框的大小?

当视图加载以及用户输入时,文本框会根据需要调整大小以适应其内容。

理想情况下,文本框将在一定点停止调整大小,比如 6 行,并变得可滚动。

2个回答

12

您需要使用UITextView代替UITextField

然后,您可以使用sizeThatFits方法。

但首先您需要知道一行的高度。您可以使用lineHeight来获取该信息:

var amountOfLinesToBeShown: CGFloat = 6
var maxHeight: CGFloat = yourTextview.font.lineHeight * amountOfLinesToBeShown

之后,只需在viewDidLoad方法中调用sizeThatFits方法,并将最大高度(line * 6)设置为您的文本视图高度:

yourTextview.sizeThatFits(CGSizeMake(yourTextview.frame.size.width, maxHeight))

为什么要使用两次 yourTextview.sizeThatFits(…) - milo526
有没有办法可以增加UITextField的行数?@Christian - Manu Gupta
1
@ManuGupta 不行。如果你想要多行功能,就必须使用 UITextView - Christian
1
我在viewDidLoad中完成了所有操作,但我的文本框没有增加。让amountOfLinesToBeShown:CGFloat = 4 let maxHeight:CGFloat = textView.font!.lineHeight * amountOfLinesToBeShown textView.sizeToFit() textView.sizeThatFits(CGSizeMake(textView.frame.size.width, maxHeight)) 我想根据内容的大小来增加我的文本视图,并且不能超过一定的高度。 - Prashant Ghimire
我使用了这个方法,但在CGSizeMake中出现了错误,所以我将其更改为CGSize.init并成功运行。但问题是文本视图仍然只有两行要显示!@Christian - Saeed Rahmatolahi

3

Swift 3

var textView : UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    textView = UITextView()
    textView.sizeThatFits(CGSize(width: textView.frame.size.width, height: textView.frame.size.height))
}

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