Bug(代码)

TableView.tableHeadView

2019-05-16  本文已影响49人  Silicn

layoutFittingCompressedSize使headerView高度自适应

好久没搞过这些事情了,今天写UI,突然需要tableView.tableHeadView自适应高度,
本来是个很简单的事情,由于忘了一个点,瞎忙好久,[Cry]

1,创建TableView

 let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: 100, height: 100),style: UITableView.Style.plain)
        tableView.delegate = self
        tableView.dataSource = self
        self.view.addSubview(tableView)
        self.tableView = tableView

        tableView.snp_makeConstraints { (make) in
            make.top.equalTo(self.view.snp_top)
            make.left.right.equalTo(0)
            make.bottom.equalTo(self.view.snp_bottom)
        }

2,添加HeadView

let header = UIView()
        
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30));
        label.text = self.content
        label.numberOfLines = 0
        header.addSubview(label)
       //设置header宽度 
        header.snp_makeConstraints { (make) in
            make.width.equalTo(UIScreen.main.bounds.width)
        }
     
        label.snp.makeConstraints { (make) in
            make.left.equalTo(header.snp_leftMargin).offset(8)
            make.right.equalTo(header.snp_rightMargin).offset(8)
            make.top.equalTo(header.snp_top)
            make.bottom.equalTo(header.snp_bottom)
        }
 
        self.tableView.tableHeaderView = header;

3,重设HeadView高度

let height = header.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
        var frame = header.bounds;
        frame.size.height = height;
        header.frame = frame;
        self.tableView.tableHeaderView = header;
      
        self.tableView.tableHeaderView?.setNeedsLayout();
        self.tableView.tableHeaderView?.layoutIfNeeded();
        

本来这样就行了,可是我由于理解问题,认为header的width系统会自动判断,少了这句

 header.snp_makeConstraints { (make) in
            make.width.equalTo(UIScreen.main.bounds.width)
        }

始终高度获取不到。
小伙伴们不要忘记!最后说一句:坑!

上一篇下一篇

猜你喜欢

热点阅读