我想在scrollView中使用textView。当用户在textView中键入时,textView应该在高度上扩展。在textView达到scrollView高度的高度之前,一切似乎都能正常工作。 scrollView的contentSize未更新。这是我的设置。
--scrollView
|--contentView
|--textView
约束设置如下:
ScrollView - 顶部,领先,尾随到superview和bottom to bottomLayoutGuide
ContentView - 顶部,前导,尾随,底部到超级视图(ScrollView),对齐中心x并将中心y对齐到superview(ScrollView)
TextView - 顶部,前导,尾随到superview(ContentView),底部是< = 400指向superview(ContentView)
具体来说,我没有为textView设置高度,因此它可以作为用户类型动态调整大小。我正在使用autolayout,textView也设置为滚动禁用。
我试图在TextViewDidChange委托调用上强制更新contentSize。
func textViewDidChange(_ textView: UITextView) {
let size = CGSize(width: textView.frame.width, height: CGFloat(MAXFLOAT))
let value = textView.sizeThatFits(size)
let newHeight = value.height + textView.frame.minY
if newHeight > scrollView.contentSize.height {
contentView.frame = CGRect(x: 0, y: 0, width: textView.frame.width, height: newHeight)
scrollView.contentSize = CGSize(width: textView.frame.width, height: value.height + textView.frame.minY)
}
}
这种方法存在几个问题。首先是每次击键都会调用sizeToFit。而textView似乎"减速"我输入的textView文本越多。
另一个问题是,当我旋转屏幕时,scrollView的滚动停止工作。
有人可以对此有所了解吗?
*更新*
我能够将其置于scrollView识别textView的动态高度变化的状态。 我的新约束是这样的:
ScrollView - 顶部,领先,尾随到superview和bottom to bottomLayoutGuide
ContentView - top,leading,trailing,bottom to superview(ScrollView),width to scrollView的superview
TextView - 顶部,前导,尾随到superview(ContentView),底部是= 400点到superview(ContentView)
现在这会相应地更新contentSize,我不需要计算任何帧。然而,这导致另一个问题,其中底部约束总是400.理想情况下,我只希望底部约束在init上为400。并且随着textView的扩展,它应该减少到0(textView底部到达contentView的底部)
有谁知道如何解决这个问题?