• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 蘋果教程教程 > 詳細(xì)頁面

        iOS11與iPhoneX適配的一些坑_IOS

        iOS11與iPhoneX適配的一些坑_IOS

        更新時間:2024-04-11 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        導(dǎo)本文轉(zhuǎn)載于:http://www.cocoachina.com/ios/20170921/20623.html導(dǎo)航欄導(dǎo)航欄高度的變化iOS11之前導(dǎo)航欄默認(rèn)高度為64pt(這里高度指statusBa...

        本文轉(zhuǎn)載于:http://www.cocoachina.com/ios/20170921/20623.html

        導(dǎo)航欄

        導(dǎo)航欄高度的變化

        iOS11之前導(dǎo)航欄默認(rèn)高度為64pt(這里高度指statusBar + NavigationBar),iOS11之后如果設(shè)置了prefersLargeTitles = YES則為96pt,默認(rèn)情況下還是64pt,但在iPhoneX上由于劉海的出現(xiàn)statusBar由以前的20pt變成了44pt,所以iPhoneX上高度變?yōu)?8pt,如果項目里隱藏了導(dǎo)航欄加了自定義按鈕之類的,這里需要注意適配一下。

        導(dǎo)航欄圖層及對titleView布局的影響

        iOS11之前導(dǎo)航欄的title是添加在UINavigationItemView上面,而navigationBarButton則直接添加在UINavigationBar上面,如果設(shè)置了titleView,則titleView也是直接添加在UINavigationBar上面。iOS11之后,大概因為largeTitle的原因,視圖層級發(fā)生了變化,如果沒有給titleView賦值,則titleView會直接添加在_UINavigationBarContentView上面,如果賦值了titleView,則會把titleView添加在_UITAMICAdaptorView上,而navigationBarButton被加在了_UIButtonBarStackView上,然后他們都被加在了_UINavigationBarContentView上,如圖:

        iOS11和iPhoneX適配的一些坑_IOS_本站

        所以如果你的項目是自定義的navigationBar,那么在iOS11上運行就可能出現(xiàn)布局錯亂的bug,解決辦法是重寫UINavigationBar的layoutSubviews方法,調(diào)整布局,上代碼:

        - (void)layoutSubviews {
          [super layoutSubviews];
          //注意導(dǎo)航欄及狀態(tài)欄高度適配
          self.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), naviBarHeight);
          for (UIView *view in self.subviews) {
            if([NSStringFromClass([view class]) containsString:@"Background"]) {
              view.frame = self.bounds;
            }
            else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
              CGRect frame = view.frame;
              frame.origin.y = statusBarHeight;
              frame.size.height = self.bounds.size.height - frame.origin.y;
              view.frame = frame;
            }
          }
        }

        再補充一點,看了簡書App適配iOS11發(fā)現(xiàn)titleView支持autolayout,這要求titleView必須是能夠自撐開的或?qū)崿F(xiàn)了- intrinsicContentSize方法

        - (CGSize)intrinsicContentSize {
          return UILayoutFittingExpandedSize;
        }

        UIScrollView、UITableView、UICollectionView

        大家在iOS11設(shè)備上運行出現(xiàn)最多問題應(yīng)該就是tableview莫名奇妙的偏移20pt或者64pt了。。原因是iOS11棄用了automaticallyAdjustsScrollViewInsets屬性,取而代之的是UIScrollView新增了contentInsetAdjustmentBehavior屬性,這一切的罪魁禍?zhǔn)锥际切乱氲膕afeArea,關(guān)于safeArea適配這篇文章iOS 11 安全區(qū)域適配總結(jié)講的很詳細(xì),感興趣的可以看下,我直接貼適配代碼,因為低版本直接用contentInsetAdjustmentBehavior會報警告,所有定義了如下的宏(感謝@炒雞范的指正,之前的宏犯了個低級錯誤...現(xiàn)改為)

        #define adjustsScrollViewInsets(scrollView)\
        do {\
        _Pragma("clang diagnostic push")\
        _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"")\
        if ([scrollView respondsToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\
          NSMethodSignature *signature = [UIScrollView instanceMethodSignatureForSelector:@selector(setContentInsetAdjustmentBehavior:)];\
          NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];\
          NSInteger argument = 2;\
          invocation.target = scrollView;\
          invocation.selector = @selector(setContentInsetAdjustmentBehavior:);\
          [invocation setArgument:&argument atIndex:2];\
          [invocation retainArguments];\
          [invocation invoke];\
        }\
        _Pragma("clang diagnostic pop")\
        } while (0)

        還有的發(fā)現(xiàn)某些界面tableView的sectionHeader、sectionFooter高度與設(shè)置不符的問題,在iOS11中如果不實現(xiàn) -tableView: viewForHeaderInSection:和-tableView: viewForFooterInSection: ,則-tableView: heightForHeaderInSection:和- tableView: heightForFooterInSection:不會被調(diào)用,導(dǎo)致它們都變成了默認(rèn)高度,這是因為tableView在iOS11默認(rèn)使用Self-Sizing,tableView的estimatedRowHeight、estimatedSectionHeaderHeight、 estimatedSectionFooterHeight三個高度估算屬性由默認(rèn)的0變成了UITableViewAutomaticDimension,解決辦法簡單粗暴,就是實現(xiàn)對應(yīng)方法或把這三個屬性設(shè)為0。

        如果你使用了Masonry,那么你需要適配safeArea

        if (@available(iOS 11.0, *)) {
          make.edges.equalTo()(self.view.safeAreaInsets)
        } else {
          make.edges.equalTo()(self.view)
        }

        iPhoneX

        LaunchImage

        關(guān)于iPhoneX(我就不吐槽劉海了...),如果你的APP在iPhoneX上運行發(fā)現(xiàn)沒有充滿屏幕,上下有黑色區(qū)域,那么你應(yīng)該也像我一樣LaunchImage沒有用storyboard而是用的Assets,解決辦法如圖,啟動圖的尺寸為1125x2436,or you can iOS開發(fā)時如何使用 Launch Screen Storyboard。

        iOS11和iPhoneX適配的一些坑_IOS_本站

        TabBarController

        因為我們的項目用了第三方的TabBarController,在iPhoneX運行,tabBar看起來怪怪的...估計作者要等到猴年馬月才適配iPhoneX,項目又著急上線,就自己修改了第三方,主要是tabBar高度及tabBarItem偏移適配,iPhoneX由于底部安全區(qū)的原因UITabBar高度由49pt變成了83pt,可以通過判斷機型來修改相關(guān)界面代碼

        #define kDevice_Is_iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

        目前遇到的就這些坑,歡迎大家指正補充~

        作為一名iOS開發(fā)人員,想到當(dāng)年嘲笑Android開發(fā)蛋疼的適配各種機型心情如圖...

        iOS11和iPhoneX適配的一些坑_IOS_本站

        總結(jié)

        以上所述是小編給大家介紹的iOS11和iPhoneX適配的一些坑,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對本站網(wǎng)站的支持!

        您可能感興趣的文章:
        • iOS10 適配-Xcode8問題總結(jié)及解決方案
        • iOS10 適配遠(yuǎn)程推送功能實現(xiàn)代碼
        • IOS自適配利器Masonry使用指南
        • 詳解iOS11、iPhone X、Xcode9 適配指南
        • 解析iOS10中的極光推送消息的適配
        • Xcode8以及iOS10適配等常見問題匯總(整理篇)
        • iOS開發(fā) 全機型適配解決方法
        • iOS 11 下適配UITableView 問題
        • iOS適配iPhone XS、 iPhone XS Max and iPhone XR的方法淺析


        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 亚洲色自偷自拍另类小说| 亚洲最大中文字幕无码网站| 麻豆亚洲AV成人无码久久精品 | 国产成人久久AV免费| 久久久久国产成人精品亚洲午夜 | 免费在线一级毛片| 亚洲AV无码精品国产成人| 在线播放免费人成视频在线观看| 狠狠色香婷婷久久亚洲精品| 女人18毛片a级毛片免费| 亚洲丶国产丶欧美一区二区三区| 国产三级免费观看| 欧洲美女大片免费播放器视频| 亚洲精品动漫人成3d在线| 国产黄色片免费看| 亚洲AV中文无码字幕色三| 99久热只有精品视频免费看| 亚洲大香人伊一本线| 免费国产黄线在线观看| 亚洲精品无码你懂的| 亚洲AV无码成H人在线观看| A毛片毛片看免费| 亚洲国产精品人久久| 日韩免费精品视频| 最新亚洲人成无码网站| 亚洲色自偷自拍另类小说| 91精品全国免费观看含羞草 | 亚洲二区在线视频| 免费观看毛片视频| 在线视频网址免费播放| 久久久久亚洲AV无码专区首JN| 永久免费毛片在线播放 | 日本道免费精品一区二区| 亚洲成人网在线观看| 日本免费的一级v一片| 久久av免费天堂小草播放| 久久国产亚洲高清观看| 免费永久看黄在线观看app| 日本免费在线观看| 亚洲色大成网站www久久九| 久久亚洲中文字幕精品一区|