ios 11和iphone x的相關(guān)適配問(wèn)題及解決方法
有關(guān)iOS11 ,最大的變化就是增加了一個(gè)安全區(qū)域(safeArea)的概念,iOS11 適配的大部分問(wèn)題都是由于它引起的。
在ios 11中,tableView會(huì)莫名偏移,解決辦法:
//解決iOS11 tableview會(huì)出現(xiàn)漂移,預(yù)估高度都設(shè)為0 self.tableView.estimatedRowHeight = 0; self.tableView.estimatedSectionHeaderHeight = 0; self.tableView.estimatedSectionFooterHeight = 0;
解決scrollView,默認(rèn)位移了,解決辦法:
-(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
}
關(guān)于iphone x適配,封裝了一個(gè)類:代碼如下:
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) {//設(shè)備屏幕類型
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
總結(jié)
以上所述是小編給大家介紹的ios 11和iphone x的相關(guān)適配問(wèn)題及解決方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
iOS 中 使用UITextField格式化銀行卡號(hào)碼的解決方案
今天小編給大家分享ios中使用UITextField格式化銀行卡號(hào)碼的實(shí)現(xiàn)思路詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12
通過(guò)UIKit坐標(biāo)系來(lái)全面掌握iOS中的UIScrollView組件
iOS開(kāi)發(fā)套件中的UIScrollView組件十分強(qiáng)大,不僅是滾動(dòng),縮放操作也能夠控制自如,其核心當(dāng)然是坐標(biāo)軸上的控制,下面就通過(guò)UIKit坐標(biāo)系來(lái)全面掌握iOS中的UIScrollView組件2016-05-05
iOS tableView實(shí)現(xiàn)下拉圖片放大效果
這篇文章主要為大家詳細(xì)介紹了iOS tableView實(shí)現(xiàn)下拉圖片放大效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
iOS開(kāi)發(fā)一個(gè)好看的ActionSheet
本篇文章通過(guò)代碼分享和圖文形式教給大家用IOS寫一個(gè)好看的ActionSheet過(guò)程以及注意事項(xiàng),需要的朋友參考下吧。2018-01-01
ios UITableView 自定義右滑刪除的實(shí)現(xiàn)代碼
這篇文章主要介紹了ios UITableView 自定義右滑刪除的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
IOS開(kāi)發(fā)中使用writeToFile時(shí)的注意事項(xiàng)
本篇文章主要介紹了開(kāi)發(fā)中使用writeToFile時(shí)的注意事項(xiàng),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03
iOS實(shí)現(xiàn)支付寶螞蟻森林隨機(jī)按鈕及抖動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)支付寶螞蟻森林隨機(jī)按鈕及抖動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02

