Using autolayout in a tableHeaderView

前端 未结 8 2128
谎友^
谎友^ 2020-12-01 06:03

I have a UIView subclass that contains a multi-line UILabel. This view uses autolayout.

8条回答
  •  执笔经年
    2020-12-01 06:16

    Using Extension in Swift 3.0

    extension UITableView {
    
        func setTableHeaderView(headerView: UIView?) {
            // set the headerView
            tableHeaderView = headerView
    
            // check if the passed view is nil
            guard let headerView = headerView else { return }
    
            // check if the tableHeaderView superview view is nil just to avoid
            // to use the force unwrapping later. In case it fail something really
            // wrong happened
            guard let tableHeaderViewSuperview = tableHeaderView?.superview else {
                assertionFailure("This should not be reached!")
                return
            }
    
            // force updated layout
            headerView.setNeedsLayout()
            headerView.layoutIfNeeded()
    
            // set tableHeaderView width
            tableHeaderViewSuperview.addConstraint(headerView.widthAnchor.constraint(equalTo: tableHeaderViewSuperview.widthAnchor, multiplier: 1.0))
    
            // set tableHeaderView height
            let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
            tableHeaderViewSuperview.addConstraint(headerView.heightAnchor.constraint(equalToConstant: height))
        }
    
        func setTableFooterView(footerView: UIView?) {
            // set the footerView
            tableFooterView = footerView
    
            // check if the passed view is nil
            guard let footerView = footerView else { return }
    
            // check if the tableFooterView superview view is nil just to avoid
            // to use the force unwrapping later. In case it fail something really
            // wrong happened
            guard let tableFooterViewSuperview = tableFooterView?.superview else {
                assertionFailure("This should not be reached!")
                return
            }
    
            // force updated layout
            footerView.setNeedsLayout()
            footerView.layoutIfNeeded()
    
            // set tableFooterView width
            tableFooterViewSuperview.addConstraint(footerView.widthAnchor.constraint(equalTo: tableFooterViewSuperview.widthAnchor, multiplier: 1.0))
    
            // set tableFooterView height
            let height = footerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
            tableFooterViewSuperview.addConstraint(footerView.heightAnchor.constraint(equalToConstant: height))
        }
    }
    

提交回复
热议问题