2015-05-15 14 views
11

Ho una semplice applicazione a schede la cui prima scheda è una UITableViewController. Dopo aver inserito alcuni dati, ho notato che la parte superiore della vista tabella si sovrappone alla barra di stato.ios UITableViewController barra di stato sovrapposta

Ho provato a fare scherzi con lo edgesForExtendedLayout e impostazioni simili, ma non ho trovato la combo magica. Qualcuno sa come correggere questo?

Procedura per riprodurre:

  1. creare una nuova applicazione a schede
  2. Rimuovere la prima scheda UIViewController e sostituirlo con un UITableViewController
  3. Popolare il UITableView con alcuni dati
  4. eseguire l'applicazione

Ecco un paio di schermate del setup e t egli problema: Xcode Storyboard UITableView overlapping status bar

risposta

26

Basta modificare la proprietà contentInset della visualizzazione della tabella, che può aggiungere un po 'di imbottitura intorno al vostro contenuto. Nel viewDidLoad() aggiungere quanto segue:

tableView.contentInset.top = 20 

in Objective-C, non è possibile assegnare alla parte superiore direttamente, in modo da fare in questo modo:

self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0); 

Naturalmente può essere qualsiasi valore arbitrario, in questo caso, è l'altezza della barra di stato.

+13

Grazie. Sono sorpreso che questo non sia il default. (Apple dovrebbe controllare la barra di stato e impostarla di conseguenza). Ho risolto con 'tableView.contentInset.top = UIApplication.sharedApplication(). StatusBarFrame.height' perché non mi piacciono i numeri magici :) –

+0

E hai ragione su quella. ;) Bene, la ragione è che (dal momento che iOS 7) le viste estendono i loro bordi per l'intero schermo di default. Se incorpori la vista in un controller di navigazione, vedrai che la barra di navigazione viene presa in considerazione automaticamente (chiamata "guida al layout top"). –

+0

probabilmente vorrai impostare scrollIndicatorInsets anche – Janneman

3

Come suggerito nei commenti, un modo è quello (a Swift 3):

override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.contentInset.top = UIApplication.shared.statusBarFrame.height 
} 

Ma questo non pulite. È preferibile impostare embed the UITableViewController in a UINavigationController (Editor> Incorpora in> Controller di navigazione) e deselezionare "Mostra barra di navigazione" nell'ispettore. Non è necessario alcun tweaking!

Problemi correlati