UITableView HeaderView,FooterView 使用SnapKit布局導致約束異常


今天做一個APP里面設置頁面(個人中心) 就是一個列表菜單 頂部是一個頭像和賬戶標題, 底部為一個退出登錄按鈕

當然我第一時間就想到了UITableView, HeaderView, FooterView

// 我創建了兩個類文件, 用來做UITableView 的header, footer
class SettingHeaderView: UIView {
     //里面的布局是采用 SnapKit 布局
}
class SettingFooterView: UIView {
}

  

 

期初我是這樣寫的, 但是運行就報錯了

override func viewDidLoad() {
        super.viewDidLoad()
        
        //1.創建header,footerView
        let headView = SettingHeaderView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 120))
        let footerView = SettingFooterView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 150))


     //2.賦值給UITableView
        self.tableView.tableHeaderView = headView
        self.tableView.tableFooterView = footerView

        
        self.tableView.dataSource = self
        self.tableView.delegate = self
        
        self.view.addSubview(self.tableView)
        self.tableView.mas_makeConstraints { (maker) in
            
            maker?.top.equalTo()(self.mas_topLayoutGuide)
            maker?.left.right()?.equalTo()(self.view)
            maker?.bottom.equalTo()(self.view.mas_bottom)
        }
}  

  

我第一時間想到了, 是UITableView沒進行刷新布局, 我加上了setNeedsLayout 和 layoutIfNeeded 依舊不可, 我又想到, 是否我添加的header 和footer也需呢?

但是也是錯誤了, 后來我想了下, 修改了代碼的順序

override func viewDidLoad() {
        super.viewDidLoad()
        
        self.tableView.dataSource = self
        self.tableView.delegate = self
        
        self.view.addSubview(self.tableView)
        self.tableView.mas_makeConstraints { (maker) in
            
            maker?.top.equalTo()(self.mas_topLayoutGuide)
            maker?.left.right()?.equalTo()(self.view)
            maker?.bottom.equalTo()(self.view.mas_bottom)
        }

        //必要的代碼, 刷新TableView
        self.tableView.setNeedsLayout()
        self.tableView.layoutIfNeeded()
        
        //1.創建header,footerView
        let headView = SettingHeaderView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 120))
        let footerView = SettingFooterView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 150))
        
        //2.賦值給UITableView
        self.tableView.tableHeaderView = headView
        self.tableView.tableFooterView = footerView
        
      //必要的代碼, 刷新TableView
        self.tableView.setNeedsLayout()
        self.tableView.layoutIfNeeded()
}

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM