前提・実現したいこと
tableViewをつかってアコーディオンメニューを作成しています。
tableViewHeader内のlabelの文字が増えるのに合わせて高さを可変にするのに詰まっています。
tableViewHeaderはxibファイルに切り出しています。
tableViewはViewControllerにおいてありHeaderの高さはコード内の
Swift
1 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 2 return 70 3 }
で指定しないとlabelが表示さませんでしたが、この関数が呼ばれるタイミングが早すぎるため、
xibが生成されてlabelの文字が当てこまれた後の高さを代入することもできませんでした。
またestimatedSectionHeaderHeightで高さを仮置きして、xib生成後に上書きするという方法も考えたのですが
estimatedSectionHeaderHeightが無視されてうまくいきませんでした。
どうしたらxibの高さをtableViewに反映できるのでしょうか。。
補足情報(FW/ツールのバージョンなど)
XCode 9.4.1
Swift 4.1.2
header(xib)
header(swiftファイル)
Swift
1import Foundation 2import UIKit 3//TODO: トグルのIconはスクショで代用してるだけなので変更が必要 4 5class QAHeaderView: CustomViewBase{ 6 7 @IBOutlet weak var questionLabel: UILabel! 8 @IBOutlet weak var toggleImage: UIImageView! 9// @IBOutlet weak var topAllgnmentConstraint: NSLayoutConstraint! 10// @IBOutlet weak var bottomAllgnmentConstraint: NSLayoutConstraint! 11 @IBOutlet weak var borderHeightConstraint: NSLayoutConstraint! 12 13 // MARK: - Initializer 14 required init(frame: CGRect) { 15 super.init(frame: frame) 16 setupEventHeaderView() 17 } 18 let parentsVC = QAViewController() 19 required init?(coder aDecoder: NSCoder) { 20 super.init(coder: aDecoder) 21 setupEventHeaderView() 22 } 23 24 // MARK: - Function 25 //ここでlabelにtext代入 26 func setHeader(_ qa: QA) { 27// topAllgnmentConstraint.constant = parentsVC.screenSize.height * 0.0284 28// bottomAllgnmentConstraint.constant = parentsVC.screenSize.height * 0.0284 29 questionLabel.text = qa.question 30 } 31 //ここでAnswerが開かれてるか判断 32 //アイコンは開閉に合わせて角度を変更 33 func shouldExtended(_ result: Bool) { 34 var rotationEnd: CGFloat 35 if result { 36 rotationEnd = 180.0 37 borderHeightConstraint.constant = 0 38 } else { 39 rotationEnd = 0.0 40 borderHeightConstraint.constant = 1 41 } 42 UIView.animate(withDuration: 0.16, animations: { 43 self.toggleImage.transform = CGAffineTransform(rotationAngle: (rotationEnd * CGFloat(Double.pi)) / 180.0) 44 }) 45 } 46 47 // MARK: - Private Function 48 private func setupEventHeaderView() { 49 toggleImage.backgroundColor = UIColor.white 50 toggleImage.transform = CGAffineTransform(rotationAngle: (0.0 * CGFloat(Double.pi)) / 180.0) 51 } 52} 53