Niedawno przeprowadziłem migrację części kodu do nowego zestawu SDK iOS 11 beta 5.
UITableView zachowuje się teraz bardzo myląco. Sam widok tabeli nie jest taki wyszukany. Mam niestandardowe komórki, ale w większości są to tylko ich wysokość.
Kiedy naciskam kontroler widoku z widokiem tabeli, otrzymuję dodatkową animację, w której komórki „przewijają się w górę” (lub być może cała ramka widoku tabeli jest zmieniana) iw dół wzdłuż animacji nawigacji push / pop. Proszę zobaczyć gif:
Tworzę ręcznie tableview
w loadView
metodzie i ustawiam ograniczenia automatycznego układu, aby były równe wiodącemu, końcowemu, górnemu i dolnemu nadzorowi widoku tabeli. Superview to widok główny kontrolera widoku.
Wyświetl kod wypychania kontrolera jest bardzo standardowy: self.navigationController?.pushViewController(notifVC, animated: true)
Ten sam kod zapewnia normalne zachowanie w systemie iOS 10.
Czy mógłbyś wskazać mi, co jest nie tak?
EDYCJA: Zrobiłem bardzo prosty kontroler widoku tabeli i mogę tam odtworzyć to samo zachowanie. Kod:
class VerySimpleTableViewController : UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = String(indexPath.row)
cell.accessoryType = .disclosureIndicator
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let vc = VerySimpleTableViewController.init(style: .grouped)
self.navigationController?.pushViewController(vc, animated: true)
}
}
EDYCJA 2: Udało mi się zawęzić problem do mojego dostosowania UINavigationBar. Mam takie dostosowanie:
rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)
gdzie createFilledImage
tworzy kwadratowy obraz o podanym rozmiarze i kolorze.
Jeśli skomentuję tę linię, wrócę do normalnego zachowania.
Byłbym wdzięczny za wszelkie przemyślenia w tej sprawie.
navigationBar.isTranslucent
na false
, inaczej to działa dobrze.