如何使TextField宽度适应他的内容?

时间:2017-02-08 19:41:31

标签: ios swift xcode

是否有任何选项可以让TextField适应他的内容?

2 个答案:

答案 0 :(得分:0)

有一种方法可以通过在发生更改时调整textview的框架来手动完成。

var text: String = "Some text is just here..."
let size: CGSize = text.size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 14.0)])

^代码将为您提供完全显示文本所需的大小,您可以根据它调整textView的大小。 //请注意textview中可能有一些填充

extension String {
    func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)

        return boundingBox.height
    }
}

^如果你需要动态高度(多行)约束宽度将帮助你完成任务。

我不完全确定你想要完成什么,但我希望这会有所帮助。

答案 1 :(得分:0)

为textview的高度约束创建一个oultet。之后:

 textView.delegate = self
 textView.isScrollEnabled = false

 func textViewDidChange(_ textView: UITextView) {
        let fixedWidth = textView.frame.size.width
        textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
        let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
        var newFrame = textView.frame
        newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
        heightTextview.constant = newFrame.size.height //update constraint constant with new height
 }

textView将更改适合多行内容的高度。效果很好