UICollectionView In UITableViewCell の高さ調整メモ
collectionView.isScrollEnabled = false にしておく。
    // viewDidLayoutSubviewsの初回判定用のフラグ
    var isFirstLayoutSubviews = true
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        guard isFirstLayoutSubviews else { return }
        // ここで調整
        collectionView.reloadData()
        tableView.reloadData()
        isFirstLayoutSubviews = false
    }
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        // TableViewCellの高さをCollectionViewのContentSizeの高さにする
        return collectionView.collectionViewLayout.collectionViewContentSize.height
    }
UITextView in UITableViewCel の高さ変更メモ
class ViewController: UITextViewDelegate {
    
    var currentKeyboardHeight: CGFloat = 0
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        addObservers(showSelector: #selector(showKeyboard), hideSelector: #selector(hideKeyboard))
    }
    @objc func showKeyboard(_ notification: Notification) {
        currentKeyboardHeight = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.height ?? 0
    }
    func textViewDidChange(_ textView: UITextView) {
        // TextViewの中身によってcellの高さを必要に応じて変えている
        let oldHeight = textView.bounds.height
        let newHeight = textView.sizeThatFits(CGSize(width: textView.bounds.width, height: CGFloat.greatestFiniteMagnitude)).height
        
        if oldHeight != newHeight {
            let cellRect = tableView.rectForRow(at: IndexPath(row: 4, section: 0))
            let memoTextViewTopLine: CGFloat = tableView.convert(cellRect, to: self.view).minY
            let newBottomLine = memoTextViewTopLine + newHeight
            let keyboardTopLine: CGFloat = view.bounds.height - currentKeyboardHeight
            
            if newBottomLine >= keyboardTopLine {
                // キーボードに隠れる高さになったらスクロールするようにして回避
                textView.isScrollEnabled = true
            } else if textView.isScrollEnabled {
                // テキストを削除して、隠れない高さになった直後は高さがずれるのでtableView.beginUpdates()とかしない
                textView.isScrollEnabled = false
            } else {
                // それ以外はスクロールを無効化してセルの高さを変更する
                textView.isScrollEnabled = false
                tableView.beginUpdates()
                tableView.endUpdates()
            }
        }
    }
    
    func textViewDidEndEditing(_ textView: UITextView) {
        tableView.contentOffset.y = 0
    }
}
編集時に初期値いれて、中身に応じて高さを合わせるときは、viewDidLoad()の中でこれでいけた。
tableView.performBatchUpdates(nil, completion: nil)を呼ぶと表示が崩れた。
if let memo = edit?.memo {
    memoTextView.text = memo
    memoTextView.layoutIfNeeded()
}