UITextView sizeThatFits给出了一个在Swift中太短的答案

Pet*_*rtz 4 uitextview uiedgeinsets swift

当您尝试sizeThatFits在UITextView上执行操作时,如果您将所述UITextView的高度设置为结果,那么它太短了!这个答案:

UITextView内容大小太短

似乎也不尽如人意,如果检查contentInset文本视图的属性,contentInset则全部设置为零.

Pet*_*rtz 15

它使用的关键textContainerInset而不是contentInset.这将为您提供正在寻找的顶部和底部的适当缓冲区.所以,你会得到类似的东西:

textView.text = "Some multiline text";
let size: CGSize = textView.sizeThatFits(CGSizeMake(textView.frame.size.width, CGFloat.max));
let insets: UIEdgeInsets = textView.textContainerInset; 
textViewHeight.constant = size.height + insets.top + insets.bottom;
Run Code Online (Sandbox Code Playgroud)

同样重要的是要注意,必须在渲染UITextView之后调用此方法.换句话说,我最初是viewDidLoad在控制器的方法中调整它,当实际上它必须在viewDidAppear.这很烦人,因为视图已经显示出来,但是我通过淡化少数几个以获得更好的美学来解决它.

  • 谢谢!!我在我的视图控制器中覆盖了`viewDidLayoutSubviews()`,并完美地调用了它工作的方法!以前我在`viewDidLoad` 中调用了这个方法,想知道为什么它不起作用! (2认同)