TableView滚动到最后一个单元格

时间:2016-06-02 01:38:10

标签: ios iphone swift uitableview constraints

我在ViewController中有2个TableView,我为它们设置了约束。我还设置了约束和对齐。问题在于,当它开始时,对齐按预期工作,但是当我按下上面的TableView1(到达底部)时,它会推动最后一个单元格(请查看下面的屏幕截图)。

Here is a video showing the problem

And the behaviour of horizontal inspector

最后更新:我想到了一种解决方法,但我无法弄清楚如何应用它。如果我可以获得TableView中最后一行的y位置,也许我可以强制TableView不要滚动到位置+行高+#39;下面。我有办法做到吗?

原始问题

它启动时工作正常并且看起来像预期的那样,最后一行/单元格的底部附加到TableView的底部

enter image description here

(红色是TableView1,粉红色是TableView2)

但是当向上滚动并到达底部时,滚动比底部单元格更多。相反,底部单元格应该连接到TableView1的底部。

(蓝色是TableView1'背景色)

enter image description here

可能是什么问题?如何将TableView1的底部TableViewCell附加到TableView1的底部,以便不进行更多滚动?

更新:我制作了TableView1的高度132和每行44.它创建的间隙大小与44相同。但是我检查了numberOfRowsInSection ,计数是预期的,而不是+1。

为什么会这样?

Update2:我很确定它不是代码,但这里是代码

TableView1约束:

enter image description here

let sampleData = [
    PreviewDetail(title: "Small"),
    PreviewDetail(title: "Medium"),
    PreviewDetail(title: "Large"),
    PreviewDetail(title: "Large")

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell:UITableViewCell?

    if tableView == self.TableView1 {
        cell = tableView.dequeueReusableCellWithIdentifier("TV1Cell", forIndexPath: indexPath)
        let previewDetail = sampleData[indexPath.row]
        cell!.textLabel!.text = previewDetail.title
    }
    return cell!
}

 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var count:Int?

    if tableView == self.TableView1 {
        count = sampleData.count
    }
    return count!
}

2 个答案:

答案 0 :(得分:0)

最后我找到了答案。奇怪的是,当我把“观景台”作为......时,

TabBarController -> NavBarController -> ViewController -> View -> 2xTableViews

..它导致了错误的观点。我尝试在虚拟项目中重新创建问题以了解问题的本质,并且它也在虚拟项目中引起了同样的问题。

答案:

答案是在ViewController中取消勾选Adjust Scroll View Insets。现在一切正常。

答案 1 :(得分:-1)

虽然您的代码中似乎没有任何错误,但当我尝试重新创建场景时,我无法重现它。我使用两个宽度相等的UITableViews,tableViews的两个单元格都是Default Basic。 这是代码。

class ViewController: UIViewController {


@IBOutlet var tableView1:UITableView!
@IBOutlet var tableView2:UITableView!

let data1 = ["First Table, Data 1","First Table, Data 2","First Table, Data 3","First Table, Data 4","First Table, Data 5","First Table, Data 6","First Table, Data 7","First Table, Data 8"]
let data2 = ["Second Table, Data 1","Second Table, Data 2","Second Table, Data 3","Second Table, Data 4","Second Table, Data 5","Second Table, Data 6","Second Table, Data 7","Second Table, Data 8"]

override func viewDidLoad() {
    super.viewDidLoad()

    tableView1.dataSource = self
    tableView2.dataSource = self

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



}

extension ViewController:UITableViewDataSource
{
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        if tableView.isEqual(self.tableView1)
        {
            return data1.count
        }
        else if tableView.isEqual(self.tableView2)
        {
            return data2.count
        }
        return 0
    }

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    if tableView == self.tableView1
    //if tableView.isEqual(self.tableView1)
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell1")
        cell?.textLabel?.text = data1[indexPath.row]
        return cell!
    }
    else
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell2")
        cell?.textLabel?.text = data2[indexPath.row]
        return cell!
    }
}

}