首页 > 解决方案 > 我正在尝试以编程方式创建 UI,但滚动视图和文本视图无法正常工作

问题描述

我有一个带有滚动视图的 UIViewController,一个以编程方式添加了字段的内容视图。文本视图已禁用滚动。随着用户键入文本视图的大小会增加,但不会向上移动到键盘上方。滚动也没有滚动正确的视图。请检查附件项目

extension ScrollViewController: UITextViewDelegate {
    func textViewDidChange(_ textView: UITextView) {
        let fixedWidth = textView.frame.size.width
        var newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
        if newSize.height < 200 {
            newSize.height = 200
        }
        textView.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
        if let constraint = (body.constraints.filter { $0.firstAttribute == .height }.first) {
            constraint.constant = newSize.height
        }
        textView.layoutIfNeeded()
    }
}

约束代码:

func addConstraints() {
        // scroll view
        NSLayoutConstraint.activate([
            scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: 8.0),
            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8.0),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8.0),
            scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -8.0)
            ])
        // content view
        NSLayoutConstraint.activate([
            contentView.topAnchor.constraint(equalTo: view.topAnchor),
            contentView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            contentView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            contentView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            contentView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1.0)
            ])
        // title text field
        NSLayoutConstraint.activate([
            titleText.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 100),
            titleText.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8.0),
            titleText.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8.0),
            titleText.bottomAnchor.constraint(equalTo: body.topAnchor, constant: -8.0),
            titleText.heightAnchor.constraint(equalToConstant: 31)
            ])
        // body text view
        NSLayoutConstraint.activate([
            body.topAnchor.constraint(equalTo: titleText.bottomAnchor, constant: 8.0),
            body.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8.0),
            body.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8.0),
            body.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -40),
            body.heightAnchor.constraint(equalToConstant: 200)
        ])
    }

在此处输入图像描述

标签: iosswiftuiscrollviewuitextview

解决方案


请使用以下代码

增长文本视图

根据您的要求 textview 是不够的。如果您发现任何问题,请尝试让我知道。


推荐阅读