ios 11与iphone x的相关适配问题及处理办法_IOS
发表时间:2025-10-10 来源:本站整理相关软件相关文章人气:
iPhone是苹果公司(Apple Inc. )发布搭载iOS操作系统的系列智能手机。截至2021年9月,苹果公司(Apple Inc. )已发布32款手机产品,初代:iPhone,最新版本:iPhone 13 mini,iPhone 13,iPhone 13 Pro, iPhone 13 Pro Max;iPhone系列产品静音键在设备正面的左侧 [46-47] ;iPhone 5之前机型使用30Pin(即30针)接口,iPhone 5(包含)之后产品使用Lightning接口。
有关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) (专业提供手机教程)