在scrollViewDidScroll中调整tableview标题高度时,标题和单元格之间出现间隙

时间:2017-01-31 07:52:28

标签: ios swift uitableview autolayout

最初headerView的大小与屏幕绑定的大小相同,并且第一个小区的顶部与headerView的底部对齐。我尝试在UITableView方法中调整headerView scrollViewDidScorll高度的大小,但滚动时出现间隙。似乎headerView和单元格之间存在一些默认约束。

我已将标题视图的背景颜色更改为蓝色,并在向下滚动后打印出高度。标题视图的高度似乎正确更新,但随着我的headerView高度变小,间隙扩大。

enter image description here

这是我的代码段

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

欢迎任何帮助和建议

1 个答案:

答案 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 中修复此问题。