最初headerView的大小与屏幕绑定的大小相同,并且第一个小区的顶部与headerView的底部对齐。我尝试在UITableView
方法中调整headerView
scrollViewDidScorll
高度的大小,但滚动时出现间隙。似乎headerView和单元格之间存在一些默认约束。
我已将标题视图的背景颜色更改为蓝色,并在向下滚动后打印出高度。标题视图的高度似乎正确更新,但随着我的headerView高度变小,间隙扩大。
这是我的代码段
class ProfileTableViewController: UITableViewController {
@IBOutlet weak var headerView: UIView!
@IBOutlet weak var backgroundContainerView: UIView!
@IBOutlet weak var backgroundImageView: UIImageView!
@IBOutlet weak var overlayView: UIView!
@IBOutlet weak var backgroundContainerViewTopSpace: NSLayoutConstraint!
var backgroundImageViewOriginHeight: CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.estimatedRowHeight = self.tableView.rowHeight
self.tableView.rowHeight = UITableViewAutomaticDimension
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.headerView.frame.size = UIScreen.main.bounds.size
self.backgroundImageViewOriginHeight = self.headerView.frame.size.height
}
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < 0{
self.headerView.frame.origin.y = scrollView.contentOffset.y
self.headerView.frame.size.height = self.backgroundImageViewOriginHeight - scrollView.contentOffset.y
}else{
self.headerView.frame.size.height = self.backgroundImageViewOriginHeight - scrollView.contentOffset.y
print(self.headerView.frame.size.height)
}
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIden, for: indexPath) as! Mycell
cell.setNeedsLayout()
cell.layoutIfNeeded()
return cell
}
}
从控制台更新标题高度
574.5
572.5
571.5
569.0
568.0
567.0
565.5
564.5
563.5
562.5
561.5
560.0
欢迎任何帮助和建议
答案 0 :(得分:0)
在scrollViewDidScroll
的{{1}}下,您没有将else
设置为self.headerView.frame.origin.y
。如果您只是更改视图的高度,视图Y将保持不变,但随着scrollview的contentView移动,它将向上移动。
您需要将scrollView.contentOffset.y
设置为self.headerView.frame.origin.y
。这将导致视图随着窗口顶部的滚动而移动。
添加行
scrollView.contentOffset.y
<{1>}在self.headerView.frame.origin.y = scrollView.contentOffset.y
中修复此问题。