ho voluto condividere un codice che ho scritto per risolvere questo problema dopo aver scavato anche se un sacco di risposte e di sbattere contro molti difetti. Questo è per xCode 7.2.1. (Esempi di codice in Swift)
Il mio caso d'uso era che volevo usare la facilità dello storyboard con raggruppamento statico di TableView, ma avevo bisogno di nascondere particolari sezioni in base ai profili utente. Per farlo funzionare (come descritto in altri post) ho bisogno di nascondere le intestazioni e i piè di pagina, le righe nella sezione E nascondere il testo dell'intestazione/piè di pagina (almeno nella parte superiore). Ho scoperto che se non nascondevo (rendi trasparente) il testo, l'utente poteva scorrere oltre la parte superiore della tabella (sotto il Navigation Controller) e vedere il testo tutto ammassato insieme.
Volevo che fosse facile modificarlo e non volevo che le condizioni si diffondessero attraverso il mio codice, quindi ho creato una singola funzione chiamata shouldHideSection (sezione: Int) che è l'unica funzione che devo modificare per modificare quali righe sono nascosti.
func shouldHideSection(section: Int) -> Bool {
switch section {
case 0: // Hide this section based on condition below
return user!.isProvider() ? false : true
case 2:
return someLogicForHiddingSectionThree() ? false : true
default:
return false
}
}
Ora il resto del codice chiama semplicementeHidesidezione().
// Hide Header(s)
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return shouldHideSection(section) ? 0.1 : super.tableView(tableView, heightForHeaderInSection: section)
}
// Hide footer(s)
override func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return shouldHideSection(section) ? 0.1 : super.tableView(tableView, heightForFooterInSection: section)
}
// Hide rows in hidden sections
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return shouldHideSection(indexPath.section) ? 0 : super.tableView(tableView, heightForRowAtIndexPath: indexPath)
}
// Hide header text by making clear
override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if shouldHideSection(section) {
let headerView = view as! UITableViewHeaderFooterView
headerView.textLabel!.textColor = UIColor.clearColor()
}
}
// Hide footer text by making clear
override func tableView(tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
if shouldHideSection(section) {
let footerView = view as! UITableViewHeaderFooterView
footerView.textLabel!.textColor = UIColor.clearColor()
}
}
ho dovuto sperimentare con molti valori diversi (ritorno 0, 0,1, -1, ...) per ottenere finalmente una soluzione soddisfacente (almeno su iOS 9.x).
Spero che questo sia utile, fammi sapere se hai suggerito miglioramenti.
Qual è lo scopo di cercare di fare una tabella statica sia dinamica? Ecco a cosa servono le tabelle dinamiche. –
Le mie idee erano di implementarlo nella mia app più complicata e lì non posso convertire tutto in dinamico, tuttavia ho (più o meno) risolto! –