tutorial - iOS 11 error de UITableView
uitableview swift4 (2)
El error se puede reproducir utilizando el repositorio here .
Tengo un error extraño que afecta a mi proyecto en iOS 11 en mi UITableView. El TableView en cuestión está agrupado, tiene celdas expandibles.
Ocurren muchos efectos extraños que no aparecen en mi rama de iOS 10:
- Títulos superpuestos
- problemas extraños de teletransporte cuando el tamaño del contenido está por encima del tamaño del contenedor UITableView cuando ocurre el colapso de las celdas
- Extraño teletransporte a la parte superior de la vista de tabla al principio del desplazamiento cuando el tamaño del contenido excede el tamaño del contenedor
- El tamaño de la celda es incorrecto (muy a menudo)
También hay un ticket que parece relacionado en el foro de desarrolladores de Apple here .
Lo intenté sin ningún éxito :
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.never
}
Estoy tratando de encontrar el comportamiento que cambió en iOS 11 que podría causar este problema.
¡Cualquier ayuda sería apreciada!
Edición: el recorte a límites ayudó (pero al final, oculta / recorta el problema). Todavía tengo algunos problemas (2, 3 y 4). Cuando intento desenvolver una celda, se teletransporta de nuevo a la parte superior en lugar de ir sin problemas. Cuando desenvuelvo una celda y quiero desplazarme hacia ella sin problemas, se teletransporta a la parte superior y luego solo se desplaza a ella. (Había que añadir una sección adicional para mostrar).
Aquí hay un video del problema (usando iPhone 7 Plus, iOS 11, Xcode 9 Golden Master): https://youtu.be/XfxcmmPdeoU
En iOS 11, todas las propiedades estimadas de UITableView
( estimatedRowHeight
, estimatedSectionHeaderHeight
y estimatedSectionFooterHeight
) están predeterminadas en UITableViewAutomaticDimension
.
Veo que para tus celdas está bien ya que estás devolviendo UITableViewAutomaticDimension
en heightForRow
. Para los encabezados y pies de su sección, sin embargo, no está utilizando el tamaño automático. Intentaría deshabilitar todo el comportamiento de auto-dimensionamiento en sus encabezados / pies de página al establecer estimatedSectionHeaderHeight
, estimatedSectionFooterHeight
.
Fuente: iOS 11 Floating TableView Header
Pruebe este entorno de trabajo, asumiendo que sus IBOutlets y variables no son privadas en StandardHeaderView.swift:
func toggleSection(section: SectionType) {
self.sectionsOpened[section] = !self.sectionsOpened[section]!
let sectionIndex = self.sections.index(of: section)!
let indexPath = IndexPath(row: 0, section: sectionIndex)
UIView.animate(withDuration: 0.25) {
self.tableView.reloadRows(at: [indexPath], with: .automatic)
if let headerView = self.tableView.headerView(forSection: sectionIndex) as? StandardHeaderView {
headerView.configWith(title: headerView.headerTitleLabel.text!, isOpen: self.sectionsOpened[section]!, selector: headerView.selector)
}
self.tableView.scrollToRow(at: IndexPath(row: 0, section: sectionIndex), at: .top, animated: true)
}
}