我试图绕过可能导致我看到的错误的问题。以下是常规流程的外观:当我们第一次点击此功能时,我们将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是我的第一个单元格,它完全被覆盖通过缓存数据加载中的标题分段控制: