Unity適配iPhone X---關於Home鍵指示器適配
相信有些人在iPhone X上玩遊戲的時候,總是誤觸底部白條(Home鍵指示器,暫且先叫“底部白條”),專業術語:“App需要有從狀態列下拉或底部欄上滑的操作,而這個會和系統的下拉或上滑調出通知中心手勢衝突。” 。 於是開始 百度一下
這並不是我們想要的解決辦法....... how to 辦?
經過一系列的嘗試, 在iOS11之後iOS增加的新的API,是關於解決手勢衝突的問題。
@interface UIViewController (UIScreenEdgesDeferringSystemGestures)
// Override to return a child view controller or nil. If non-nil, that view controller's screen edges deferring system gestures will be used. If nil, self is used. Whenever the return value changes, -setNeedsScreenEdgesDeferringSystemGesturesUpdate should be called.
- (nullable UIViewController *)childViewControllerForScreenEdgesDeferringSystemGestures API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos);
// Controls the application's preferred screen edges deferring system gestures when this view controller is shown. Default is UIRectEdgeNone.
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos);
// This should be called whenever the return values for the view controller's screen edges deferring system gestures have changed.
- (void)setNeedsUpdateOfScreenEdgesDeferringSystemGestures API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos);
@end
API我們知道了,可是加到哪裡?然後通過分析Unity打包後的Xcode工程,在工程目錄
Classes->UI->UnityViewControllerBaseiOS.mm
的指令碼中,發現被重寫的方法,如下:
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
UIRectEdge res = UIRectEdgeNone;
if(UnityGetDeferSystemGesturesTopEdge())
res |= UIRectEdgeTop;
if(UnityGetDeferSystemGesturesBottomEdge())
res |= UIRectEdgeBottom;
if(UnityGetDeferSystemGesturesLeftEdge())
res |= UIRectEdgeLeft;
if(UnityGetDeferSystemGesturesRightEdge())
res |= UIRectEdgeRight;
return res;
}
我們只需要改成如下即可:
UIRectEdge res = UIRectEdgeNone;
//if(UnityGetDeferSystemGesturesTopEdge())
//res |= UIRectEdgeTop;
//if(UnityGetDeferSystemGesturesBottomEdge())
//res |= UIRectEdgeBottom;
//if(UnityGetDeferSystemGesturesLeftEdge())
//res |= UIRectEdgeLeft;
//if(UnityGetDeferSystemGesturesRightEdge())
//res |= UIRectEdgeRight;
return UIRectEdgeAll;
設定後第一次下拉“底部白條”只會展示指示器,繼續下拉才能將通知中心拉出來。如果返回UIRectEdgeNone則會直接下拉出來。
參考部落格,給大家安利一下,寫的非常棒!:
PS: 如有疑問可以留言,一起學習。
相關文章
- 適配iphone XiPhone
- iphone 適配的sdkiPhone
- iphoneX適配iPhone
- 適配iPhone XR/iPhone XS MaxiPhone
- WebView iPhoneX適配WebViewiPhone
- Android 關於資源適配Android
- iphoneX,XsMax適配iPhone
- 前端iPhone X適配總結前端iPhone
- iPhone X + iOS 11 適配指南iPhoneiOS
- iOS 11 & iPhoneX 適配iOSiPhone
- iPhoneX簡單適配iPhone
- iPhone裝置適配(更新中·····)iPhone
- Android適配: 拉伸適配的缺點Android
- flutter 螢幕尺寸適配 字型大小適配Flutter
- cocos creator中適配iPhone XiPhone
- 適配iPhoneX & iOS11iPhoneiOS
- 三步適配iPhoneXiPhone
- 適配iOS 11和iPhoneX螢幕適配遇到的一些坑iOSiPhone
- 微信小程式適配 iPhone X 總結微信小程式iPhone
- 觸手iPhoneX適配實戰iPhone
- 10分鐘適配 iOS 11 & iPhone XiOSiPhone
- 關於iPhone裝置不同顯示尺寸適配的一些方法iPhone
- Android適配Android
- iOS 11適配iOS
- https適配HTTP
- Unity學習疑問記錄之介面適配Unity
- web app 一分鐘適配 iPhone XWebAPPiPhone
- iPhone X和iOS 11的簡單適配iPhoneiOS
- 記一次 Weex 的 iPhone X 適配iPhone
- 關於 Android 狀態列的適配總結Android
- android螢幕適配三:通過畫素密度適配Android
- Android螢幕適配(理論適配100%機型)Android
- Flutter螢幕適配Flutter
- Rem 等比適配始末REM
- Flutter深色模式適配Flutter模式
- h5適配H5
- rem 適配佈局REM
- Viewport 等比適配始末View