Swift-旋转的UITextView自动调整大小问题

时间:2018-12-22 02:58:56

标签: ios iphone swift text uitextview

我使用此功能使UITextView在键入时自动适合文本内容。当TextView是水平的时,它可以正常工作,但是当TextView旋转时,它不能正常工作。任何想法如何解决?

func textViewDidChange(_ textView: UITextView) {

    let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
    textView.frame = CGRect(origin: textView.frame.origin, size: newSize)

}

3 个答案:

答案 0 :(得分:0)

根据docs

  

如果此属性的值不是恒等变换,则frame属性中的值是未定义的,应忽略。

我认为这可能是您的代码无法正常工作的原因-应用转换后frame未定义。

尝试在设置框架之前将转换设置回身份:

let transform = textView.transform
textView.transform = .identity
let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
textView.frame = CGRect(origin: textView.frame.origin, size: newSize)
textView.transform = transform

答案 1 :(得分:0)

我已经看到UITextView有时不能很好地用于转换。 将您的UITextView包裹在UIView中。将UITextView的顶部,顶部,底部和尾部内容设置为UIView。在UIView上执行所有转换。你应该很好。

答案 2 :(得分:0)

我有同样的问题,我看到了这个问题,然后我就这样解决了;

extension UITextView {
  func calculateSize() {
    let currentTransform = transform
    transform = .identity
    
    let currentCenter = center
    let fixedWidth: CGFloat = font == nil ? 300 : text.widthOfString(usingFont: font!) + 16 // 300 for the worst case scenario and 16 is for leading and trailing spaces for content
    sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
    
    let newSize = sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
    var newFrame = frame
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
    
    frame = newFrame
    center = currentCenter
    transform = currentTransform
    
    layoutIfNeeded()
  }
}