国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

ios 11和iphone x的相關適配問題及解決方法

2020-07-26 02:37:54
字體:
來源:轉載
供稿:網友

有關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的相關適配問題及解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武穴市| 分宜县| 盘锦市| 兴宁市| 蓝山县| 乐陵市| 兴文县| 三原县| 九台市| 博野县| 东港市| 陇南市| 馆陶县| 商都县| 察隅县| 大港区| 延川县| 泾阳县| 城步| 甘德县| 山丹县| 柯坪县| 杭锦旗| 青海省| 土默特左旗| 恩施市| 民乐县| 三河市| 衢州市| 台东县| 嘉鱼县| 宁都县| 伊吾县| 吉隆县| 通海县| 卢氏县| 河间市| 凤阳县| 全南县| 哈尔滨市| 怀化市|