我正在尝试使用自动布局和 Stackview 来实现一些目标。我有一个垂直 Stackview,其中包含 UIView、UITextView 和 UIView,如下所示。
我已经在这里查看了以前的答案,但找不到一个干净的解决方案来实现此目的。
The UITextView
是可编辑的,并且必须在用户输入时展开 - 为此,我已禁用滚动UITextView
在国际文凭中。我还在 UITextView 上设置了高度约束,设置为“大于或等于”10,行数设置为 0,这样UITextView
当用户键入时,获取运行时的固有高度。我还希望 UITextView 的扩展继续下去,直到UIStackView
底部边缘到达键盘附件的顶部边缘。我已经在一定程度上实现了扩展UITextView
我的堆栈视图固定到超级视图的顶部、尾部和前缘,但我不断收到错误stackview needs Y position or height
这是可以理解的,但如果我给它一个固定的高度或底部约束,那么 UITextView 就不会扩展。
我也不确定当 UITextView 到达键盘附件视图的顶部边缘时如何停止它的扩展。
到目前为止我拥有的代码是
let allowedHeight = self.view.frame.height - (self.keyboardHeight! + self.accessory.frame.height)
基本上通过减去键盘高度+附件视图高度来找到视图框架中允许的高度。这个计算是正确的。接下来我这样做(在里面textViewDidChange
)希望只是启用/禁用滚动UITextView
可以,但显然不行,因为每次击键时整个文本视图都会奇怪地上下跳跃。
func textViewDidChange(_ textView: UITextView) {
if stackView.frame.height >= allowedHeight{
textView.isScrollEnabled = true
}
if stackView.frame.height < allowedHeight{
textView.isScrollEnabled = false
}
}
实现我想要做的事情的最佳方法是什么?
情侣笔记...
我认为你最好设置你的最大高度UITextView
而不是你的UIStackView
。文本视图将根据其内容扩展/收缩,因此您可以设置<=
高度限制。
计算“elementsHeight” - 顶部和底部视图使用的垂直尺寸,加上任何间距 - 并将“最大文本视图高度”设置为视图高度减去 elementsHeight ...并减去可见时的键盘高度。
当“最大文本视图高度”更改时,更新文本视图的高度约束常量。
然后为文本视图设置一个观察者.contentSize
...并基于启用/禁用滚动.contentSize.height
与“最大文本视图高度”相比。
需要一些跳跃,以确保在布局子视图时更新大小,并确保不会陷入递归循环。
我是这样设置的:
文本视图的初始高度约束是<= 40
- 但这并不重要,因为每次视图布局不同时都会通过代码进行更改。
我在 GitHub 上放了一个示例——它可以工作,但实际上只是一个起点。有兴趣的话可以看看,然后拆开看看。https://github.com/DonMag/ExpandingTextView https://github.com/DonMag/ExpandingTextView
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)