当更改UITableView内部的高度时,UIScrollView有时会松动其滚动

时间:2017-11-15 07:13:26

标签: ios swift uiscrollview

好的,我的简单UIScrollView有两个子视图:UIViewUITableView设置为垂直模式。它们都有自己的高度约束:

我这样设置:

tableViewHeightConstraint.constant = CGFloat(height) //height is calculated based on number of cells multiplied 130

calendarViewHeightConstraint.constant = UIApplication.shared.keyWindow!.rootViewController!.traitCollection.isIpad ? 630 : 470

但有时当我滚动到底部,然后在表视图中添加一个新单元格并重新计算高度时,似乎滚动视图的滚动被锁定,我可以弹跳但滚动消失,我只能弹跳,虽然我知道我可以滚动到屏幕上当前视图上方或下方的内容。可能是什么原因?

我真的必须这样做。不可能将我的视图放在表视图标题视图中。请让我们离开这个主题;)

这是我重新计算身高的地方:

func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {

        tableView.endUpdates()
        updateView()
        updateTableViewHeight()
}

private func updateTableViewHeight() {

    var height = goalFetchedResultsController.fetchedObjects!.count * 130

    height += 45

    if MyType.selected.hasMonthReport {
        height += 130
    }

    if MyType.selected.hasAnnualReport {
        height += 70
        height += 130
    }

    tableViewHeightConstraint.constant = CGFloat(height)
}

NSFetchedResultsController的委托内添加新单元格。

1 个答案:

答案 0 :(得分:0)

我认为您需要更改TableView的高度的计算方式,

var height = tablView.contentSize.heigh // You can do + or - here 

// your other stuff of calculation.
tableViewHeightConstraint.constant = CGFloat(height)

self.view.layoutIfNeeded() // You need to call after change constraint.