基于textView

时间:2017-05-26 17:51:44

标签: ios swift swift3 autolayout tableview

我在静态表中有文本视图。我希望他们在需要换行时调整大小。我该怎么做呢?到目前为止,这是我的代码。

 override func viewDidLoad() {
    super.viewDidLoad()

    table.estimatedRowHeight = 40.0 // Replace with your actual estimation
    table.rowHeight = UITableViewAutomaticDimension


    // Tap to dismiss keyboard
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(EditInfoViewController.dismissKeyboard))
    view.addGestureRecognizer(tap)


}


func dismissKeyboard() {
    view.endEditing(true)
    // Save data
}



func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

enter image description here

1 个答案:

答案 0 :(得分:3)

Swift 3& Xcode 8.3.2

使用UILabel而不是UITextView,并设置numberOfLine = 0,因此它会根据其内容自动调整大小

如果你想保留UITextView而不是UILabel,这里是代码

class YourClass: UITableViewController, UITextViewDelegate {

    var yourCustomCell: UITableViewCell = UITableViewCell()

    override func viewDidLoad() {
        super.viewDidLoad()

        table.estimatedRowHeight = 40.0 // Replace with your actual estimation
        table.rowHeight = UITableViewAutomaticDimension


        // Tap to dismiss keyboard
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(EditInfoViewController.dismissKeyboard))
        view.addGestureRecognizer(tap)

        // Add tableView delegate
        tableView.dataSource = self
        tableView.delegate = self

        // Add textView delegate
        yourTextView.delegate = self


    }
    // Text view delegate, dont forget to add yourTextView.delegate = self in viewDidLoad
    func textViewDidChange(_ textView: UITextView) {
        if textView == yourTextView {
            let newHeight = yourCustomCell.frame.size.height + textView.contentSize.height
            yourCustomCell.frame.size.height = newHeight
            updateTableViewContentOffsetForTextView()
        }
    }
    // Animate cell, the cell frame will follow textView content
    func updateTableViewContentOffsetForTextView() {
        let currentOffset = tableView.contentOffset
        UIView.setAnimationsEnabled(false)
        tableView.beginUpdates()
        tableView.endUpdates()
        UIView.setAnimationsEnabled(true)
        tableView.setContentOffset(currentOffset, animated: false)
    }


    // UITableViewDelegate, UITableViewDataSource
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }



    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = yourCustomCell
        cell.selectionStyle = .none
        return cell
    }
}

结果如下: Before the code

使用textViewDelegate和自定义大小调整功能后的结果 After the code