【发布时间】:2017-10-26 23:45:54
【问题描述】:
我正在尝试使用 Auto Layout 和 Stackview 来实现一些目标。我有一个带有 UIView、UITextView 和 UIView 的 Vertical Stackview,如下所示。
我在这里查看了之前的答案,但找不到一个干净的解决方案来实现这一点。
UITextView 是可编辑的,并且必须在用户输入时扩展 - 为此我在 IB 中禁用了 UITextView 的滚动。我还在 UITextView 上设置了一个高度约束,设置为“大于或等于”10,行数设置为 0,以便UITextView 在用户键入时在运行时采用固有高度。我还希望 UITextView 的扩展继续进行,直到 UIStackView 底部边缘到达键盘附件的顶部边缘。我已经能够通过将堆栈视图固定到 Superview 的顶部、尾部和前缘来实现扩展 UITextView 部分,但我一直收到一个错误,即 stackview needs Y position or height 这是可以理解的,但如果我给它一个固定高度或底部约束,则 UITextView 根本不会展开。
我也不确定当 UITextView 到达键盘辅助视图的顶部边缘时如何停止它的扩展。
我目前的代码是
let allowedHeight = self.view.frame.height - (self.keyboardHeight! + self.accessory.frame.height)
基本上是通过减去keyboardheight+Accessory视图高度来找到视图框架中允许的高度。这个计算正确地发生了。接下来我这样做(在textViewDidChange 内)希望仅启用/禁用UITextView 上的滚动会起作用,但显然它不起作用,因为整个文本视图会随着每次击键而奇怪地上下跳跃。
func textViewDidChange(_ textView: UITextView) {
if stackView.frame.height >= allowedHeight{
textView.isScrollEnabled = true
}
if stackView.frame.height < allowedHeight{
textView.isScrollEnabled = false
}
}
实现我的目标的最佳方式是什么?
【问题讨论】:
标签: swift xcode autolayout uitextview uistackview