我正在尝试UITextView
在用户输入文本时动态修改 a 的高度(最高为最大高度)。当文本视图中有偶数行时,我遇到了一种非常奇怪的行为。
我正在使用自动布局,并且文本视图有高度限制。我响应对文本视图的委托 ( textViewDidChange(_:)
) 的调用,在其中我根据contentSize
.
这是代码:
func textViewDidChange(_ textView: UITextView) {
let newHeight = textView.contentSize.height
let newConstraintConst = max(MinTextViewHeight, min(MaxTextViewHeight, newHeight))
self.textViewHeightConstraint.constant = newConstraintConst
}
这很好用,它将框架调整到最大MaxTextViewHeight
,然后文本视图可以滚动。但是,当文本视图中有偶数行时,文本视图会在其底部添加一种偏移量NSTextContainer
,从而导致顶部行被截断:
但是,当有奇数行时,NSTextContainer
不再偏移:
起初我以为它以某种方式受到文本视图的控制,textContainerInset
但这仅用于填充内部的空间NSTextContainer
,因为将其设置为.zero
删除内部空间但不影响偏移量(顺便说一下,它会变得更糟,因为顶部线几乎完全消失):
我查看了UITextView
类引用,没有看到任何可以让我操纵甚至获取此偏移值的属性。
作为一种解决方法,我增加了文本容器的顶部插图并删除了底部插图:
textView.textContainerInset = UIEdgeInsetsMake(10, 0, 0, 0)
到目前为止,这是可行的,但我通过反复试验得出了 10 的值,到目前为止,我只在单个设备上对其进行了测试。
我对需要脆弱的固定值的更hacky解决方法不感兴趣;我试图了解如何设置此偏移量以及修复它的正确方法。希望有人能提供一些见解,谢谢!