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

        當前位置:雨林木風下載站 > 蘋果教程教程 > 詳細頁面

        ios 11與iphone x的相關適配問題及處理辦法_IOS

        ios 11與iphone x的相關適配問題及處理辦法_IOS

        更新時間:2024-04-11 文章作者:未知 信息來源:網絡 閱讀次數:

        有關iOS11 ,最大的變化就是增加了一個安全區域(safeArea)的概念,iOS11 適配的大部分問題都是由于它引起的。在ios 11中,tableView會莫名偏移,解決辦法://解決iOS1...

        有關iOS11 ,最大的變化就是增加了一個安全區域(safeArea)的概念,iOS11 適配的大部分問題都是由于它引起的。

        在ios 11中,tableView會莫名偏移,解決辦法:

        //解決iOS11 tableview會出現漂移,預估高度都設為0 
         self.tableView.estimatedRowHeight = 0; 
         self.tableView.estimatedSectionHeaderHeight = 0; 
         self.tableView.estimatedSectionFooterHeight = 0; 

        解決scrollView,默認位移了,解決辦法:

        -(void)setScrollViewContentInsetAdjustmentBehavior:(UIScrollView *)scrollView { 
        #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 
         if(@available(iOS 11.0, *)) { 
          if ([scrollView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) { 
           scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; 
          } 
         } 
        #endif 
        } 

        關于iphone x適配,封裝了一個類:代碼如下:

        ScreenTool.h

        #import <Foundation/Foundation.h> 
        #import <UIKit/UIKit.h> 
        #define ViewSafeAreaInsets(view) [ScreenToolSharedInstance getViewSafeAreaInsets:view] 
        #define WindowSafeAreaInsets [ScreenToolSharedInstance getWindowSafeAreaInsets] 
        #define Screen_height [[UIScreen mainScreen] bounds].size.height 
        #define Screen_width [[UIScreen mainScreen] bounds].size.width 
        #define ScreenToolSharedInstance [ScreenTool sharedInstance] 
        #define NavAndStatusBarHeight [ScreenToolSharedInstance getNavAndStatusBarHeight] 
        #define TabBarAndVirtualHomeHeight [ScreenToolSharedInstance getTabBarAndVirtualHomeHeight] 
        #define StatusBarHeight [ScreenToolSharedInstance getStatusBarHeight] 
        #define NavContentHeight [ScreenToolSharedInstance getNavContentHeight] 
        #define TabBarContentHeight [ScreenToolSharedInstance getTabBarContentHeight] 
        #define ScrollViewContentInsetAdjustmentBehavior(scrollView) [ScreenToolSharedInstance setScrollViewContentInsetAdjustmentBehavior:scrollView] 
        typedef NS_ENUM(NSUInteger, DeviceScreenType) {//設備屏幕類型 
         DeviceTypeIphone4Screen, 
         DeviceTypeIphone5Screen, 
         DeviceTypeIphone6Screen, 
         DeviceTypeIphone6PlusScreen, 
         DeviceTypeIphoneXScreen, 
         DeviceTypeOtherScreen 
        }; 
        typedef NS_ENUM(NSUInteger, DeviceOrientationType) {//屏幕方向類型 
         DeviceOrientationTypeHorizontalScreen, 
         DeviceOrientationTypeVerticalScreen, 
         DeviceOrientationTypeOther 
        }; 
        @interface ScreenTool : NSObject 
        @property(nonatomic,unsafe_unretained)BOOL isAccordingToSafeArea; 
        -(void)setScrollViewContentInsetAdjustmentBehavior:(UIScrollView *)scrollView; 
        +(ScreenTool *)sharedInstance; 
        +(BOOL)isSmallScreen; 
        -(UIEdgeInsets)getWindowSafeAreaInsets; 
        -(UIEdgeInsets)getViewSafeAreaInsets:(UIView *)view; 
        -(NSString *)getDevice; 
        -(DeviceScreenType)getDeviceType; 
        -(DeviceOrientationType)getDeviceOrientationType; 
        -(CGFloat)getNavAndStatusBarHeight; 
        -(CGFloat)getTabBarAndVirtualHomeHeight; 
        -(CGFloat)getTabBarContentHeight; 
        -(CGFloat)getNavContentHeight; 
        -(CGFloat)getStatusBarHeight; 
        @end 
        ScreenTool.m
        [objc] view plain copy
        #import "ScreenTool.h" 
        @implementation ScreenTool 
        -(instancetype)init{ 
         if (self = [super init]) { 
          self.isAccordingToSafeArea = YES; 
         } 
         return self; 
        } 
        +(ScreenTool *)sharedInstance { 
         static dispatch_once_t pred = 0; 
         __strong static id screenTool = nil; 
         dispatch_once(&pred, ^{ 
          screenTool = [[self alloc] init]; 
         }); 
         return screenTool; 
        } 
        -(void)setScrollViewContentInsetAdjustmentBehavior:(UIScrollView *)scrollView { 
        #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 
         if(@available(iOS 11.0, *)) { 
          if ([scrollView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) { 
           scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; 
          } 
         } 
        #endif 
        } 
        -(UIEdgeInsets)getWindowSafeAreaInsets { 
         UIEdgeInsets i = UIEdgeInsetsZero; 
        #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 
         if(@available(iOS 11.0, *)) { 
          i = [UIApplication sharedApplication].keyWindow.safeAreaInsets; 
         } 
        #endif 
         return i; 
        } 
        -(UIEdgeInsets)getViewSafeAreaInsets:(UIView *)view { 
         UIEdgeInsets i = UIEdgeInsetsZero; 
        #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 
         if(@available(iOS 11.0, *)) { 
          i = view.safeAreaInsets; 
         } 
        #endif 
         return i; 
        } 
        -(NSString *)getDevice { 
         if ((Screen_width == 320 && Screen_height == 480) || (Screen_height == 320 && Screen_width == 480)) { 
          return @"4"; 
         }else if ((Screen_width == 320 && Screen_height == 568) || (Screen_height == 320 && Screen_width == 568)) { 
          return @"5"; 
         }else if ((Screen_width == 375 && Screen_height == 667) || (Screen_height == 375 && Screen_width == 667)) { 
          return @"6"; 
         }else if ((Screen_width == 375 && Screen_height == 812) || (Screen_height == 375 && Screen_width == 812)) { 
          return @"x"; 
         }else if ((Screen_width == 414 && Screen_height == 736) || (Screen_height == 414 && Screen_width == 736)) { 
          return @"6p"; 
         }else { 
          return @""; 
         } 
        } 
        -(DeviceScreenType)getDeviceType { 
         if ((Screen_width == 320 && Screen_height == 480) || (Screen_height == 320 && Screen_width == 480)) { 
          return DeviceTypeIphone4Screen; 
         }else if ((Screen_width == 320 && Screen_height == 568) || (Screen_height == 320 && Screen_width == 568)) { 
          return DeviceTypeIphone5Screen; 
         }else if ((Screen_width == 375 && Screen_height == 667) || (Screen_height == 375 && Screen_width == 667)) { 
          return DeviceTypeIphone6Screen; 
         }else if ((Screen_width == 375 && Screen_height == 812) || (Screen_height == 375 && Screen_width == 812)) { 
          return DeviceTypeIphoneXScreen; 
         }else if ((Screen_width == 414 && Screen_height == 736) || (Screen_height == 414 && Screen_width == 736)) { 
          return DeviceTypeIphone6PlusScreen; 
         }else { 
          return DeviceTypeOtherScreen; 
         } 
        } 
        -(DeviceOrientationType)getDeviceOrientationType { 
         if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) { 
          return DeviceOrientationTypeVerticalScreen; 
         } else if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) { 
          return DeviceOrientationTypeHorizontalScreen; 
         }else { 
          return DeviceOrientationTypeOther; 
         } 
        } 
        +(BOOL)isSmallScreen{ 
         if (Screen_width >=375 && Screen_height >= 667) { 
          return NO; 
         }else { 
          return YES; 
         } 
        } 
        -(CGFloat)getTabBarContentHeight { 
         if (!UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, WindowSafeAreaInsets)) { 
          //if ([self getDeviceType] == DeviceTypeIphoneXScreen) { 
          if ([self getDeviceOrientationType] == DeviceOrientationTypeHorizontalScreen) { 
           if (self.isAccordingToSafeArea) { 
            return 32; 
           }else { 
            return 49; 
           } 
          }else { 
           return 49; 
          } 
         }else { 
          return 49; 
         } 
        } 
        -(CGFloat)getNavContentHeight { 
         if (!UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, WindowSafeAreaInsets)) { 
          // } 
          // if ([self getDeviceType] == DeviceTypeIphoneXScreen) { 
          if ([self getDeviceOrientationType] == DeviceOrientationTypeHorizontalScreen) { 
           if (self.isAccordingToSafeArea) { 
            return 32; 
           }else { 
            return 44; 
           } 
          }else { 
           return 44; 
          } 
         }else { 
          return 44; 
         } 
        } 
        -(CGFloat)getStatusBarHeight { 
         return [[UIApplication sharedApplication] statusBarFrame].size.height; 
        } 
        -(CGFloat)getNavAndStatusBarHeight { 
         return [self getNavContentHeight]+[self getStatusBarHeight]; 
        } 
        -(CGFloat)getTabBarAndVirtualHomeHeight { 
         return [self getTabBarContentHeight]+WindowSafeAreaInsets.bottom; 
        } 
        @end 

        總結

        以上所述是小編給大家介紹的ios 11和iphone x的相關適配問題及解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!

        您可能感興趣的文章:
        • iOS11和iPhoneX適配的一些坑
        • 詳解iOS11、iPhone X、Xcode9 適配指南
        • iPhone X官方文檔的適配學習詳解
        • iPhoneX無導航欄頁面適配問題解決方案
        • 淺談iphone X的簡單適配問題(推薦)
        • 微信小程序中吸底按鈕適配iPhone X方案
        • 關于適配iOS11和iPhoneX的一些事
        • iOS11&iPhoneX適配&Xcode9打包注意事項
        • iOS 11更新后及iPhone X推出后工程中遇到的問題及適配方法
        • iPhoneX 各種適配記錄筆記(超全面)


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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 99爱免费观看视频在线| 一级做a毛片免费视频| 一级做a爰全过程免费视频| 国产日产亚洲系列最新| 一个人看的www免费高清| 又粗又大又硬又爽的免费视频| 亚洲午夜无码毛片av久久京东热| 午夜免费1000部| 亚洲va在线va天堂va手机| 37pao成人国产永久免费视频 | 成人免费视频小说| 亚洲一卡2卡3卡4卡5卡6卡 | 1000部啪啪毛片免费看| 亚洲天堂一区在线| 四虎国产精品免费久久影院| 亚洲国产精品无码观看久久| 国产日产成人免费视频在线观看| 激情小说亚洲色图| 伊人久久综在合线亚洲91| 国内精品免费久久影院| 久久久久亚洲精品成人网小说| 一级毛片在线免费观看| 亚洲综合精品第一页| 无码不卡亚洲成?人片| 久久久久久av无码免费看大片| 亚洲精品综合一二三区在线| 人成午夜免费视频在线观看| 亚洲精品乱码久久久久蜜桃| 亚洲综合亚洲综合网成人| 国产成人精品无码免费看| 亚洲视频一区二区三区四区| 亚洲av手机在线观看| 久久综合九色综合97免费下载| 亚洲免费在线视频播放| www.亚洲色图| 99久热只有精品视频免费观看17| 亚洲另类自拍丝袜第五页| 中文字幕亚洲天堂| 无码人妻一区二区三区免费| 免费一级特黄特色大片 | 亚洲一久久久久久久久|