🧬

[Swift]TableView Footerに説明文 超速サンプル

2023/05/26に公開

UITableViewのとあるsectionのフッターに説明文を置きたいときがある。
UITextViewを利用し改行にも対応。
AutoLayoutで自動サイズ調整。

extension MyTableViewController : UITableViewDataSource {
    func tableView(_ tableView: UITableView, estimatedHeightForFooterInSection section: Int) -> CGFloat {
        return 20
    }
    
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        switch section {
        case 0:
            return UITableView.automaticDimension
        default: break
        }
        return CGFloat.leastNormalMagnitude
    }
}

extension MyTableViewController : UITableViewDelegate {    
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        if section == 0 {
            let footerView = makeFooterView()
            return footerView
        }
        return nil
    }
    
    private func makeFooterView() -> UIView {
        let footerView = UIView()
        let textView = UITextView()
        textView.translatesAutoresizingMaskIntoConstraints = false
        textView.text = "表示したいテキストをここに書きます"
        textView.textColor = .gray
        textView.backgroundColor = .clear
        textView.isScrollEnabled = false
        textView.isEditable = false
        textView.isSelectable = false
        textView.textContainer.lineBreakMode = .byCharWrapping
        footerView.addSubview(textView)
        NSLayoutConstraint.activate([
            textView.leadingAnchor.constraint(equalTo: footerView.leadingAnchor, constant: 12.0),
            textView.trailingAnchor.constraint(equalTo: footerView.trailingAnchor, constant: -12.0),
            textView.topAnchor.constraint(equalTo: footerView.topAnchor),
            textView.bottomAnchor.constraint(equalTo: footerView.bottomAnchor)
        ])
        return footerView
    }
}

Discussion