OGeek|极客世界-中国程序员成长平台

标题: ios - 文本跳转,同时在 swift 中自动调整 textView 的大小 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 20:17
标题: ios - 文本跳转,同时在 swift 中自动调整 textView 的大小

如果我的应用中有一个简单的 messageView。 messageView 上是一个带有 textView 的输入容器。 textView 应根据其内容调整大小。

到目前为止它可以工作,但是每次换行到下一行时,文本都会“跳转”第一个字符,但会用第二个字符重新定位。看起来像: enter image description here

enter image description here

enter image description here

我的大部分代码。我认为它与 textView(?) 的滚动功能有关。

private let container: UIView = {
    let view = UIView()

    view.backgroundColor = UIColor.white
    view.layer.cornerRadius = 20
    view.layer.masksToBounds = true
    view.layer.borderColor = UIColor(red:0.90, green:0.90, blue:0.90, alpha:1.0).cgColor
    view.layer.borderWidth = 0.5
    view.translatesAutoresizingMaskIntoConstraints = false

    return view
}()

private lazy var inputTV: UITextView = {
    let tv = UITextView()

    tv.translatesAutoresizingMaskIntoConstraints = false
    tv.font = UIFont(name: "OpenSans-Light", size: 16)
    tv.backgroundColor = .red
    tv.delegate = self
    tv.textContainer.lineBreakMode = .byWordWrapping

    return tv
}()

override internal init(frame: CGRect) {
    super.init(frame: CGRect.zero)

    translatesAutoresizingMaskIntoConstraints = false

    addSubview(container)
    container.addSubview(inputTV)

    container.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -16).isActive = true
    container.leftAnchor.constraint(equalTo: leftAnchor , constant: 16).isActive = true
    container.rightAnchor.constraint(equalTo: rightAnchor, constant: -16).isActive = true
    containerHeightAnchor = container.heightAnchor.constraint(equalToConstant: 40)
    containerHeightAnchor?.isActive = true 

    inputTV.leftAnchor.constraint(equalTo: uploadButton.rightAnchor).isActive = true
    inputTV.centerYAnchor.constraint(equalTo: container.centerYAnchor).isActive = true
    inputTV.rightAnchor.constraint(equalTo: sendButton.leftAnchor, constant: -5).isActive = true
    textViewHeightAnchor = inputTV.heightAnchor.constraint(equalTo: container.heightAnchor)
    textViewHeightAnchor?.isActive = true
}

internal func textViewDidChange(_ textView: UITextView) {
    let contentHeight = textView.contentSize.height
    containerHeightAnchor?.constant = max(contentHeight, 40)
    inputTV.frame.size.height = contentHeight
}

我希望有人可以提供帮助。问候



Best Answer-推荐答案


感谢@DonMag,我确实从 textView 中删除了 heightAnchor,它确实对我有用。新代码如下:

关于ios - 文本跳转,同时在 swift 中自动调整 textView 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51046186/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4