这是一个困扰我和我的团队工作的问题。
我们在一个部分中使用的标题视图并不总是绘制。这是不一致的,但在全新安装时似乎更频繁。
我将首先说明我们没有将它注册到表视图,因此实际上并没有将它出列。我试过了,但老板说,因为我们从来没有真正重新使用它,所以他坚决反对这样做。因此,我们这样做:
class DashboardViewController {
...
var trendsHeader: TrendsHeader?
...
override func viewDidLoad() {
super.viewDidLoad()
setupTrendsHeader()
....
}
...
func setupTrendsHeader() {
trendsHeader = Bundle(for: TrendsHeader.self).loadNibNamed(TrendsHeader.identifier, owner: view, options: nil)?.first as? TrendsHeader
trendsHeader?.delegate = self
trendsHeader?.datasource = self
trendsHeader?.leftDropdown.selectRowWithAction(at: 0)
}
...
// in heightForHeaderInSection
return TrendsHeader.cellHeight //Height is returned properly, empty space is of the right height
...
// in viewForHeaderInSection
return trendsHeader ?? UIView()//Should only return UIView if trendsHeader is nil
}
我试过修改viewForHeaderInSection:
//in viewForHeaderInSection
if trendsHeader == nil {
setupTrendsHeader()//Breakpoint inserted here
}
return = trendsHeader ?? UIView()
在if语句中有一个断点,所以我应该知道trendsHeader
是否为零。它没有达到断点但仍然没有绘制那个标题。如果我在5-30秒的任何地方等待标题将显示,或者如果我向下滚动标题将在重绘部分时显示。但我最初也需要它才能显示出来,它在应用程序的大多数运行中仍然会显示,但有时却没有。老实说,最令人沮丧的是不一致。
有关为何发生这种情况和/或解决方案的任何见解都没有让我的老板说服重新使用的观点不会被重复使用?
答案 0 :(得分:1)
我们找到了。简而言之,有问题的部分与2个服务呼叫相关联,标题下拉菜单中的每个选项都有一个。这些服务的代表在回调函数上重新加载了这一部分,他们正在快速连续地获取它们,从而导致故障。
我们用重新加载行代码替换了重载段代码,因此标题不会刷新。