UITextView高度调整

时间:2018-03-04 09:16:37

标签: swift uikit uitextview

我正在尝试创建一个包含大量文本的ViewController。我使用UILabel,但由于文字可能很长,所以它不会起作用。试图切换到UITextView,但我遇到了一些问题。

我使用ScrollView,因为顶部有一个图像,底部有一个按钮。所以我不会在UITextView内部滚动。我已经禁用了它。

我希望Text根据文本长度自动调整高度。所以它可以滚动图像,按钮等。就像应用程序Instapaper,Medium,Pocket等。

我已尝试过StackOverflow上的所有代码和解决方案,但它们要么不起作用,要么是Objective-C。

故事板结构: 视图控制器 - >查看 - > ScrollView - >图像,TextView,按钮

class ViewController: UIViewController {

  @IBOutlet weak var textView: UITextView!
  var theContent = fromClass.text

  override func viewDidLoad() {
    super.viewDidLoad()
    textView.text = theContent
  }
}

1 个答案:

答案 0 :(得分:0)

改变UITextView

的大小的方法很少
extension String {

    func bounds(approximated width: CGFloat, approximated height: CGFloat, font: UIFont) -> CGRect {
        let size = CGSize(width: width, height: height)
        let attribs = [NSAttributedStringKey.font: font]

        return NSString(string: self).boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: attribs, context: nil)
    }
}

approximated width =您UITextView的宽度我认为它将是静态值,您不会改变。

approximated height = UITextView的最小高度。

该方法将返回文本输入的框架。取自它的高度属性,取决于有多大改变UITextView的大小。

如果它不能让你满意,你可以用另一种方式。

func heightOfString(_ attributes: [NSAttributedKeyString : Any]) -> CGFloat {
    let size = self.size(withAttributes: attributes)
    return size.height
}

与上面相同的用法。