覆盖第一个单元格的UITableView标题视图

时间:2016-06-20 16:25:20

标签: ios swift uitableview

我试图绕过可能导致我看到的错误的问题。以下是常规流程的外观:当我们第一次点击此功能时,我们将tableHeaderView设置为自定义segmentedcontrol视图,然后进行服务调用以获取一些数据,当完成时,我们重新加载表。这些数据都被缓存,因此当用户离开并返回时,不进行任何服务调用,只返回缓存的数据。然而,当回来时,它似乎没有认识到表头上有一个标题视图,而是将tableView放在与其标题视图相同的原点,因此第一个单元格被headerView覆盖。以下是一些相关的方法:

override func viewDidLoad() {
    super.viewDidLoad()

    self.useAdaptableFeedbackFooter = true
    self.tableView.registerReusableCell(DCManagePaymentsTransactionCell.self)
    self.tableView.tableHeaderView = self.segmentedControlView

    self.segmentedControlView.selectedSegmentIndex = self.selectedSegment.rawValue
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    // TODO: Remove once we have other segments implemented
    makeServiceCall()
}

private lazy var segmentedControlView: DMSegmentedControlTableHeaderView = {
    let view = DMSegmentedControlTableHeaderView.loadableViewFromNib()
    let segmentTitles = [DCManagePaymentsString.Summary.localized, DCManagePaymentsString.History.localized, DCManagePaymentsString.Pending.localized]

    view.segmentTitles = segmentTitles
    view.delegate = self
    return view
}()

private func makeServiceCall() {
    self.businessService.getData {
        (result: DMServiceResult<DCPendingPayments>) -> Void in
        switch result {
        case .Success (let data):
            if data.isHAMode {
                self.data.payment = data.pendingPayments.first
                self.tableView.dataSource = self.HADataSource
                self.tableView.delegate = self.HADataSource
            } else {
                self.data.pendingPayments = data.pendingPayments
                self.tableView.dataSource = self.dataSource
                self.tableView.delegate = self.dataSource
            }

            self.tableView.reloadData()

        case .Failure(let errorInfo):
            self.navigationController?.handleError(errorInfo, withCompletion: nil)
        }
    }
}

我能看到的唯一区别是我们最终会多快调用reloadData()。当我在reloadData()中设置明确的viewDidAppear来电时,它会正确设置tableView,但这是一个不稳定的动画。

似乎我可能会将我的表设置为太快,因为它可以识别出标题视图?虽然造成这种情况的原因并不重要。任何想法或建议?如有必要,我可以发布更多代码。

编辑:我添加了两个屏幕截图,第一个是第一次加载时标题的样子,第二个是你返回后它只是获取缓存数据(Pending Payments是我的第一个单元格,它完全被覆盖通过缓存数据加载中的标题分段控制:

First Load

Cached Load

0 个答案:

没有答案