При использовании больших заголовков на панели навигации вместе с UITableView, который привязан к источнику данных драйвера Rx, я заметил, что если привязка и начальная загрузка данных происходят, когда представление находится за пределами экрана, при переходе к немубудет прокручиваться так, что большой заголовок будет уменьшен до «свернутого» положения.
Общая настройка - это UITableViewController с установленным prefersLargeTitles = true
.Tableview настроен и впоследствии привязан к источнику данных Rx в пределах viewDidLoad
.
Пример кода:
override func viewDidLoad() {
super.viewDidLoad()
setupTableView()
bindToTableView()
// ...
}
private func setupTableView() {
tableView.register(cellType: Cell.self)
tableView.tableFooterView = UIView()
tableView.separatorStyle = .none
// ...
// We are required to first reset the data source and delegate to allow
// for RxCocoa to take over control.
tableView.dataSource = nil
tableView.delegate = nil
tableView.rx.setDelegate(self)
.disposed(by: bag)
// ...
}
private func bindToModel() {
viewModel.modelDriver
.drive(tableView.rx.items) { tableView, row, model in
let indexPath = IndexPath(row: row, section: 0)
let cell: Cell = tableView.dequeueReusableCell(for: indexPath)
cell.prepare(with: model)
return cell
}.disposed(by: bag)
}
И под «сокращенным» я подразумеваю, что заголовки переключаются на этот стиль:
![small nav title](https://i.stack.imgur.com/VfPOc.png)
Кто-нибудь еще сталкивался с этой проблемой?
Решено: Как @ daniel-t упоминает нижепроблема вызвана не Rx, а временем, когда prefersLargeTitles = true
.Если это свойство не установлено до , то происходит вызов tableView.reloadData()
, тогда таблица загрузит данные и прокрутит соответствующим образом для небольших заголовков .Затем, после установки больших заголовков, просмотр таблицы не сбрасывает позицию прокрутки, чтобы компенсировать новую, большую область панели навигации.
Причина, по которой это проявляется несколько странно, даже при использовании чего-то вроде .skipUntil(...viewWillAppear)
, заключается в том, чтоАкт привязки запускает начальное обновление Rx, которое перезагружает таблицу.