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 XR/iPhone XS MaxiPhone
- 前端iPhone X適配總結前端iPhone
- cocos creator中適配iPhone XiPhone
- Android適配: 拉伸適配的缺點Android
- flutter 螢幕尺寸適配 字型大小適配Flutter
- iphoneX適配iPhone
- Android適配Android
- dimens適配
- Android螢幕適配(理論適配100%機型)Android
- 微信小程式適配 iPhone X 總結微信小程式iPhone
- 關於 Android 狀態列的適配總結Android
- 螢幕適配
- WebView iPhoneX適配WebViewiPhone
- iphoneX,XsMax適配iPhone
- 裝置適配
- 適配問題
- Unity學習疑問記錄之介面適配Unity
- android螢幕適配三:通過畫素密度適配Android
- pc大屏適配
- Flutter螢幕適配Flutter
- Flutter深色模式適配Flutter模式
- 移動端適配
- rem 適配佈局REM
- h5適配H5
- Android圖示適配Android
- Rem 等比適配始末REM
- AutoLayout螢幕適配
- android 螢幕適配Android
- android全面屏適配Android
- Android P 適配指南Android
- (原創)高DPI適配經驗系列:(四)高DPI適配示例
- 關於移動端適配,你必須要知道的
- 關於圖片適配不同尺寸的image View(實戰)View
- 移動端H5-iPhone安全距離適配H5iPhone
- 微信小程式吸底區域適配iPhone X微信小程式iPhone
- iOS 關於全面屏適配的方案及UI在不同尺寸下適配方案iOSUI
- 應用適配資料庫還是資料庫適配應用資料庫