Swift - TextView 的高度和宽度在输入时发生变化
Swift - TextView Heigth & Width change when typing
我想在打字时调整文本视图的大小,但是使用这段代码我没有改变宽度。每次我将 textView 大小设置为 200。错误在哪里?请帮助我。
提前致谢
let textViewX = UITextView(frame: CGRect(x: self.view.frame.width / 2 - 100, y: self.view.frame.height / 2 - 25, width: 200, height: 50))
textViewX.isScrollEnabled = false
textViewX.clipsToBounds = false
textViewX.delegate = self
textViewX.font = UIFont.systemFont(ofSize: 25)
self.view.addSubview(textViewX)
func textViewDidChange(_ textView: UITextView) {
let fixedWidth = textView.frame.size.width
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
textView.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
}
您的问题是您使用 sizeThatFits(:)
方法告诉 newSize
它不能比 fixedWidth
宽。如果您更改代码以允许更大的宽度,您的 textView 将水平增长:
let fixedHeight = textView.frame.size.height
let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: fixedHeight))
textView.frame.size = newSize
这允许 textView 的框架只能水平增长。为了让你可以尝试这样的事情:
let maxWidth = UIScreen.main.bounds.width - 20
let maxHeight = UIScreen.main.bounds.height - 20
let newSize = textView.sizeThatFits(CGSize(width: maxWidth, height: maxHeight))
textView.frame.size = newSize
textView.center = view.center
这允许框架在垂直和水平方向上增长,保持 textView 在其父视图中居中,并将 textView 的大小限制为屏幕大小(四周有 20 pt 边框)。
我想在打字时调整文本视图的大小,但是使用这段代码我没有改变宽度。每次我将 textView 大小设置为 200。错误在哪里?请帮助我。
提前致谢
let textViewX = UITextView(frame: CGRect(x: self.view.frame.width / 2 - 100, y: self.view.frame.height / 2 - 25, width: 200, height: 50))
textViewX.isScrollEnabled = false
textViewX.clipsToBounds = false
textViewX.delegate = self
textViewX.font = UIFont.systemFont(ofSize: 25)
self.view.addSubview(textViewX)
func textViewDidChange(_ textView: UITextView) {
let fixedWidth = textView.frame.size.width
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
textView.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
}
您的问题是您使用 sizeThatFits(:)
方法告诉 newSize
它不能比 fixedWidth
宽。如果您更改代码以允许更大的宽度,您的 textView 将水平增长:
let fixedHeight = textView.frame.size.height
let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: fixedHeight))
textView.frame.size = newSize
这允许 textView 的框架只能水平增长。为了让你可以尝试这样的事情:
let maxWidth = UIScreen.main.bounds.width - 20
let maxHeight = UIScreen.main.bounds.height - 20
let newSize = textView.sizeThatFits(CGSize(width: maxWidth, height: maxHeight))
textView.frame.size = newSize
textView.center = view.center
这允许框架在垂直和水平方向上增长,保持 textView 在其父视图中居中,并将 textView 的大小限制为屏幕大小(四周有 20 pt 边框)。