2017-09-15 15 views
15

Wenn Sie auf dem iPhone X im Hochformat eine untere Einschränkung auf den sicheren Bereich auf 0 setzen, wird am Ende des Bildschirms ein zusätzliches Leerzeichen angezeigt. Wie erhalten Sie programmatisch die Höhe dieser zusätzlichen Polsterung?Zusätzlicher Boden/Polsterung auf dem iPhone X?

ich es geschafft, die Höhe dieser Polsterung manuell zu bestimmen, die 34 ist und hier ist, wie ich mit ihm iPhone X Erkennung implementieren verwaltet:

Swift 4.0 und Xcode 9,0

if UIDevice().userInterfaceIdiom == .phone 
{ 
    switch UIScreen.main.nativeBounds.height 
    { 
     case 2436: //iPhone X 
     self.keyboardInAppOffset.constant = -34.0 
     default: 
     self.keyboardInAppOffset.constant = 0 
    } 
} 

Ist Gibt es eine sauberere Möglichkeit, die Höhe dieser Polsterung zu erkennen?

+1

sieh dies für ref: https://medium.com/@hacknicity/how-ios-apps-adapt-to-the-iphone-x-screen-size-a00bd109bbb9 –

+1

sieh dir das könnte hilfreich sein https://medium.com/the-travelled-ioss-developers-guide/iphone-x-dealing-with-home-indicator-2e8e47f5647f –

Antwort

31

In iOS 11 haben Sichten eine safeAreaInsets Eigenschaft. Wenn Sie die bottom Eigenschaft dieser Einsätze bekommen können Sie die Höhe der unteren Polsterung, während auf iPhone X erhalten:

if #available(iOS 11.0, *) { 
    let bottomPadding = view.safeAreaInsets.bottom 
    // ... 
} 

(ebenfalls für die Top-Polsterung mit Statusleiste)

4

Wenn plötzlich haben Sie keine Aussicht zum Beispiel CollectionViewLayout, können Sie es aus Fenster abrufen zu:

private static var itemHeight: CGFloat { 
    guard #available(iOS 11.0, *), 
     let window = UIApplication.shared.keyWindow else { 
      return Constants.itemHeight 
    } 
    return Constants.itemHeight - window.safeAreaInsets.bottom 
} 
15

In Objective-C

if (@available(iOS 11.0, *)) { 
    UIWindow *window = UIApplication.sharedApplication.keyWindow; 
    CGFloat bottomPadding = window.safeAreaInsets.bottom; 
}