2017-09-15 13 views
15

पोर्ट्रेट मोड में आईफोन एक्स पर, यदि आप सुरक्षित क्षेत्र में 0 तक सीमित बाधा सेट करते हैं, तो आप स्क्रीन के नीचे एक अतिरिक्त स्थान के साथ समाप्त हो जाएंगे। आप इस अतिरिक्त पैडिंग की प्रोग्रामेटिक रूप से ऊंचाई कैसे प्राप्त करते हैं?आईफोन एक्स पर अतिरिक्त नीचे स्थान/पैडिंग?

मैं मैन्युअल रूप से इस गद्दी जो 34 है और यहाँ की ऊंचाई निर्धारित करने में कामयाब रहे कि कैसे मैं iPhone एक्स का पता लगाने के साथ इसे लागू करने में कामयाब रहे है:

स्विफ्ट 4.0 और 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 
    } 
} 

है इस पैडिंग की ऊंचाई का पता लगाने के लिए एक साफ तरीका है?

+1

इसे रेफरी के लिए देखें: https://medium.com/@hacknicity/how-ios-apps-adapt-to-the-iphone-x-screen-size-a00bd109bbb9 –

+1

यह उपयोगी हो सकता है https://medium.com/the-traveled-ios-developers-guide/iphone-x-dealing-with-home-indicator-2e8e47f5647f –

उत्तर

31

आईओएस 11 में, विचारों में safeAreaInsets संपत्ति है।

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

(वैसे ही स्थिति पट्टी के साथ शीर्ष गद्दी के लिए)

4

आप कोई दृश्य है, तो अचानक: यदि आप इन सन्निवेश के bottom संपत्ति मिलता है आप iPhone एक्स पर नीचे गद्दी जबकि की ऊंचाई प्राप्त कर सकते हैं उदाहरण के लिए, CollectionViewLayout, आप इसे विंडो से भी प्राप्त कर सकते हैं:

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

में ऑब्जेक्टिव-सी

if (@available(iOS 11.0, *)) { 
    UIWindow *window = UIApplication.sharedApplication.keyWindow; 
    CGFloat bottomPadding = window.safeAreaInsets.bottom; 
} 
संबंधित मुद्दे