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

首頁 > 系統 > iOS > 正文

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

2019-10-21 18:43:49
字體:
來源:轉載
供稿:網友

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


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 香港| 桃园市| 工布江达县| 巴青县| 襄汾县| 两当县| 拉萨市| 灵台县| 关岭| 石楼县| 临夏市| 巴青县| 醴陵市| 理塘县| 沁阳市| 福建省| 怀柔区| 巨鹿县| 韶关市| 奇台县| 闽侯县| 福泉市| 沭阳县| 兴业县| 台北县| 阿拉善盟| 儋州市| 金沙县| 遵化市| 涿鹿县| 蒙自县| 老河口市| 湘潭市| 建阳市| 三穗县| 闵行区| 罗江县| 皮山县| 游戏| 肥东县| 浏阳市|