ScrollView中的TextView - 在键入时禁用自动滚动?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ScrollView中的TextView - 在键入时禁用自动滚动?相关的知识,希望对你有一定的参考价值。

也许问题的根源在我身上,但我找不到禁用在其中有scrollviewtextView上的autoscroll的选项。

每当用户在滚动视图的可见区域底部输入新行并继续键入时,滚动视图就会移动

———-

这不是一个问题,问题是我不能设置一个“边距”,以防止UI元素过度拥挤的外观

图片:

(1)现在看起来在底部输入一个新行并键入/ scrollView自动滚动到该位置/

(2)应该是什么样的

enter image description here

我能做什么?

答案

我正在使用UITextView做类似的事情,它具有指定的初始高度,并使用输入文本不断增加高度,直到达到指定的最大高度,然后开始滚动文本。让我知道那就是你要找的东西。

enter image description here单行enter image description here两行enter image description here三行enter image description here四行enter image description here停止增加高度

我正在使用如下的委托方法。以下代码中的高度约束是来自Storyboard的IBOutlets。

func textViewDidChange(_ textView: UITextView) {
    let maxSize = CGSize(width: textView.frame.width, height: 90.0)
    let estimatedSize = textView.sizeThatFits(maxSize)
    if estimatedSize.height <= 90 {
        textView.isScrollEnabled = false
        textViewHeightConstraint.constant = estimatedSize.height
        textViewContainerHeightConstraint.constant = estimatedSize.height + 12.0
    } else {
        textView.isScrollEnabled = false
        textViewHeightConstraint.constant = 90.0
        textViewContainerHeightConstraint.constant = 102.0
    }
}
另一答案

我有一个类似的问题。只需在其周围放一个容器(UIView)并将UITextView放入此容器中。你可以通过mytextView.superview访问这个...


以下是如何使用Container创建TextView的示例...

// SuperView of textView
let container = UIView() 
self.scrollView.addSubview(container)

let textView = UITextView()
/*
your textView config
*/
container.addSubview(textView)

只需在电视委托方法中设置参考(如果完成编辑,别忘了清除它)

// Delegate of UITextView... 
func textViewDidBeginEditing(_ textView: UITextView) {
    activeTextView = textView
    currentIdentifier = textView.accessibilityIdentifier
}

这是观察者内部的一个片段(KeyboardDidShow / Hide)

// activeTextView was defined inside textView
if activeTextView != nil { 
    // now you can access it via textview.superview?
    if let origin = activeTextView.superview?.frame.origin, let parentFrame = activeTextView.superview?.frame {
        if !aRect.contains(origin) {
            scrollView.scrollRectToVisible(parentFrame, animated:true)
        }
    }
}
另一答案

唯一的工作方法是在textView的底部添加一个视图..不太明白为什么

以上是关于ScrollView中的TextView - 在键入时禁用自动滚动?的主要内容,如果未能解决你的问题,请参考以下文章

我想在 TextView 中启用 ScrollView。当 TextView 高度增加时

iOS SDK:一个ScrollView中有两个TextView?

如何根据动态内容调整 textview 和 scrollview 内容大小

TextView垂直重力在ScrollView中不起作用

Swiftui如何根据textview内容管理Scrollview Height

有没有办法防止 ScrollView 在 TextView 获得焦点时自动滚动?