2016-09-26 1 views
0

Scrollen in meinem UITableViewController mit mehreren Elementen lässt die Zelle hinter meinem UIStatusBar erscheinen. Ich habe versucht, eine Arbeit um diese Methode zu tun:UITableViewController und UIStatusbar

var bounds = self.view.bounds 
    bounds.origin.y -= 20.0; 
    self.view.bounds = bounds 
    // Create a solid color background for the status bar 



    let statusFrame = CGRect(x: 0, y: -20, width: bounds.size.width, height: 20) 
    let statusBar = UIView(frame: statusFrame) 
    statusBar.backgroundColor = UIColor.red 
    self.view.addSubview(statusBar) 

die mir einen roten Balken vor dem Scrollen geben wird. Es verschwindet nach ein wenig Scrollen. Ich habe auch versucht, das contentInset des TableView Top zu UIApplication.shared.statusBarFrame.height machen, aber das gleiche getan.

Es ist wichtig, die Navbar zu behalten. Auch mein TableViewController ist eingebettet in eine UINavigationController

Irgendwelche Ideen?

+0

Was ist mit dem Zustand, wenn Sie Scrollen beenden, verstecken Sie die Leiste oder zeigen Sie? Und wie läuft Ihre Plattform, nur iOS 8 über oder alle Versionen? – ronan

+0

ios8 und höher. Es muss die ganze Zeit über stabil sein. ob Scrollen oder nicht. @ronan – JVS

+0

Sie möchten nur die Hintergrundfarbe des Statusbalkens in rot ändern und sicherstellen, dass sie nicht automatisch geändert wird, richtig? – ronan

Antwort

1

Eine Möglichkeit könnte sein, UITableViewController zu reformieren und UITableView zu machen und eine obere Einschränkung unterhalb der Statusleiste hinzuzufügen.

Ein weiterer Grund ist die Statusleiste Farbe wie sich ändern:

func setStatusBarBackgroundColor(color: UIColor) { 
    if let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView { 
     statusBar.backgroundColor = color 
    } 
} 

Aber Vorsicht, da es eine private api ist. Ihre App wird möglicherweise abgelehnt.

+0

Ich bin mir nicht sicher, wie man das Äquivalent in swift verwendet. Wie bei der Verwendung des doppelten valueForKey – JVS

+1

@JVS Überprüfen Sie die aktualisierten Code-Snippets. – Xchord

+0

Ich bekomme eine NSUnknownKeyException auf statusBar – JVS

0

endlich eine Antwort gefunden:

erstellen Sie eine benutzerdefinierte UIView und die der Blick auf navigationController hinzu:

let rect = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, 
    height: UIApplication.shared.statusBarFrame.height) 

    let bar = UIView(frame: rect) 
    bar.backgroundColor = UIColor.white 

    navigationController?.view.addSubview(bar) 

funktioniert wie ein Zauber.

1

Je nach Ihrem Zweck können Sie einfach die Statusleiste ausblenden.

override var prefersStatusBarHidden: Bool { 
    return true 
}