一個UITableView頭部添加一個UIView檩赢,都用snpkit(Swift代碼)布局燃异,一般代碼寫法
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(listView)
listView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
listView.tableHeaderView = headBackView
headBackView.snp.makeConstraints { make in
make.width.equalTo(listView.snp.width)
make.height.equalTo(100)
}
}
很明顯墓猎,view遮住了cell工猜,原因是:
- 在viewDidLoad中乃秀,
listView
添加headerView時顽频,headBackView
的frame并沒有生成藤肢,listView.tableHeaderView
高度為0 - 后面刷新布局時,
headBackView
高度改變已經(jīng)不能影響listView.tableHeaderView
的布局了 - 因此糯景,需要線確定
headBackView
的frame嘁圈,再給listView.tableHeaderView
賦值
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(headBackView)
headBackView.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(100)
}
self.view.addSubview(listView)
listView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
// 在布局完成后的方法中,再操作
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if listView.tableHeaderView == nil {
headBackView.removeFromSuperview()
listView.tableHeaderView = headBackView
headBackView.snp.remakeConstraints { make in
make.width.equalTo(listView.snp.width)
make.height.equalTo(100)
}
}
}
在某個時間點蟀淮,頭部view高度變化
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if listView.tableHeaderView == nil {
headBackView.removeFromSuperview()
listView.tableHeaderView = headBackView
headBackView.snp.remakeConstraints { make in
make.width.equalTo(listView.snp.width)
make.height.equalTo(100)
}
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
self.headBackView.snp.updateConstraints { make in
make.height.equalTo(200)
}
}
}
}
view還是遮擋了
listView
最住,但現(xiàn)在istView.tableHeaderView
的高度有100,也就是說:listView.tableHeaderView
被賦值后灭贷,snpkit不能在改變它的布局當
headView
發(fā)生高度變化時温学,只能先取消istView.tableHeaderView
賦值,添加到self.view中甚疟,更改布局仗岖,再賦值給istView.tableHeaderView
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if listView.tableHeaderView == nil {
headBackView.removeFromSuperview()
listView.tableHeaderView = headBackView
headBackView.snp.remakeConstraints { make in
make.width.equalTo(listView.snp.width)
make.height.equalTo(100)
}
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
self.listView.tableHeaderView = nil
self.view.addSubview(self.headBackView)
self.headBackView.snp.remakeConstraints { make in
make.width.equalTo(0)
make.height.equalTo(300)
}
// 添加一個延時,再去刷新
DispatchQueue.main.asyncAfter(deadline: .now() + 0.001) {
self.headBackView.removeFromSuperview()
self.listView.tableHeaderView = self.headBackView
self.headBackView.snp.remakeConstraints { make in
make.width.equalTo(self.listView.snp.width)
make.height.equalTo(300)
}
}
}
}
}