Skip to content

Instantly share code, notes, and snippets.

@amfathi
Last active May 22, 2020 23:41
Show Gist options
  • Select an option

  • Save amfathi/5929e9ea40776ba0eabe1f387315f2aa to your computer and use it in GitHub Desktop.

Select an option

Save amfathi/5929e9ea40776ba0eabe1f387315f2aa to your computer and use it in GitHub Desktop.
// Source https://stackoverflow.com/a/54237526
// MARK: Source Answer
extension UITableView {
//Variable-height UITableView tableHeaderView with autolayout
func layoutTableHeaderView() {
guard let headerView = self.tableHeaderView else { return }
headerView.translatesAutoresizingMaskIntoConstraints = false
let headerWidth = headerView.bounds.size.width
let temporaryWidthConstraint = headerView.widthAnchor.constraint(equalToConstant: headerWidth)
headerView.addConstraint(temporaryWidthConstraint)
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let headerSize = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
let height = headerSize.height
var frame = headerView.frame
frame.size.height = height
headerView.frame = frame
self.tableHeaderView = headerView
headerView.removeConstraint(temporaryWidthConstraint)
headerView.translatesAutoresizingMaskIntoConstraints = true
}
}
// MARK: My version
extension UITableView {
// Dynamic height tableHeaderView with autolayout
func layoutHeader() {
guard let headerView = self.tableHeaderView else { return }
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let size = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
headerView.frame.size.height = size.height
self.tableHeaderView = headerView
}
// Dynamic height tableFooterView with autolayout
func layoutFooter() {
guard let footerView = self.tableFooterView else { return }
footerView.setNeedsLayout()
footerView.layoutIfNeeded()
let size = footerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
footerView.frame.size.height = size.height
self.tableFooterView = footerView
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment