use*_*427 4 scroll uitextview ios swift
我有一个TextView,它具有最小高度为33的约束.从故事板中禁用滚动.TextView应根据内容增加高度,直到达到100的最大高度.然后我将scrollEnabled更改为true,将TextView的高度更改为最大高度100,但高度更改为33.如何修复这个问题?
import UIKit
class ViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var messageTextView: UITextView!
let messageTextViewMaxHeight: CGFloat = 100
override func viewDidLoad() {
super.viewDidLoad()
self.messageTextView.delegate = self
}
func textViewDidChange(textView: UITextView) {
if textView.frame.size.height >= self.messageTextViewMaxHeight {
textView.scrollEnabled = true
textView.frame.size.height = self.messageTextViewMaxHeight
} else {
textView.scrollEnabled = false
}
}
}
Run Code Online (Sandbox Code Playgroud)
看来你的代码需要两个更改,它会正常工作.
更改代码如下:
import UIKit
class ViewController: UIViewController, UITextViewDelegate
{
@IBOutlet weak var messageTextView: UITextView!
let messageTextViewMaxHeight: CGFloat = 100
override func viewDidLoad()
{
super.viewDidLoad()
messageTextView.delegate = self
}
func textViewDidChange(textView: UITextView)
{
if textView.contentSize.height >= self.messageTextViewMaxHeight
{
textView.scrollEnabled = true
}
else
{
textView.frame.size.height = textView.contentSize.height
textView.scrollEnabled = false // textView.isScrollEnabled = false for swift 4.0
}
}
}
Run Code Online (Sandbox Code Playgroud)这遵循与接受的答案类似的方法,但确保textView在两种高度状态下都受到完全约束。
(在接受的答案中有一个错误 - 使用具有<=关系的高度约束不足以完全约束textView启用滚动时的,因为在这种情况下,视图提供 no intrinsicContentSize。您可以在 IB(禁用滚动)中看到这一点,或在通过视图调试运行时。)
这是所有必要的:
// In IB, set the relation to `=` and the constant to your desired threshold point
// Notice this is a strong reference (since the constraint may get deactivated)
@IBOutlet var textViewHeightConstraint: NSLayoutConstraint!
func textViewDidChange(textView: UITextView)
{
let isOversize = textView.contentSize.height >= textViewHeightConstraint.constant
textViewHeightConstraint.isActive = isOversize
textView.isScrollEnabled = isOversize
}
Run Code Online (Sandbox Code Playgroud)
无需手动设置帧,因为在这两种情况下,自动布局都涵盖了我们。