• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 文本跳转,同时在 swift 中自动调整 textView 的大小

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:17:10 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

如果我的应用中有一个简单的 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,它确实对我有用。新代码如下:

  • 在 textView 上禁用滚动 (isScrollEnabled = false)

    private lazy var inputTV: UITextView = {
        let tv = UITextView()
    
        tv.translatesAutoresizingMaskIntoConstraints = false
        tv.font = UIFont(name: "OpenSans-Light", size: 16)
        tv.delegate = self
        tv.isScrollEnabled = false
    
        return tv
    }()
    
  • 删除 heightAnchor(no inputTV.heightAnchor 分别是我的 textViewHeightAnchor)

    override internal init(frame: CGRect) {
        super.init(frame: CGRect.zero)
    
        translatesAutoresizingMaskIntoConstraints = false
    
        addSubview(container)
        container.addSubview(inputTV)
    
        ...
    
        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
    }
    

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap