今天做一個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()
}
