self.tableView.estimatedRowHeight = 0; self.tableView.estimatedSectionHeaderHeight = 0; self.tableView.estimatedSectionFooterHeight = 0;
设置工程中的UITableView
、UICollectionView
、UIScrollView
的contentInsetAdjustmentBehavior
属性,以下:app
if (@available(iOS 11.0, *)){ _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; }
总的来讲全部继承与Scrollview 及其子类都须要设置 contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever
,每一个设置很麻烦,不要紧。因为UIView及其子类都遵循UIAppearance
协议,咱们能够进行全局配置:ide
// AppDelegate 进行全局设置 if (@available(iOS 11.0, *)){ [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever]; }
注意:spa
调用系统相册时列表内容发生偏移能够参考这篇文章 iOS11 系统适配中遇到的问题(1)UIImagePickerControllercode
iOS 11从新调整了导航栏的元素,强制将leftButtons
和rightButtons
位置往屏幕中央靠了一些,在这以前经过添加一个UIBarButtonSystemItemFixedSpace
把宽度设为负数以调整按钮的边距orm
//调整按钮边距 // UIBarButtonItem* spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; // //将宽度设为负值 // spaceItem.width= -5; // [items addObject:spaceItem];
iOS 11如上设置是无效的
若是你没法接受系统给设定的位置,能够试试下面的方法xml
#pragma mark 导航栏 添加文字按钮 - (NSMutableArray<UIButton *> *)addNavigationItemWithTitles:(NSArray *)titles isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags { NSMutableArray * items = [[NSMutableArray alloc] init]; //调整按钮位置 // UIBarButtonItem* spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; // //将宽度设为负值 // spaceItem.width= -5; // [items addObject:spaceItem]; NSMutableArray * buttonArray = [NSMutableArray array]; NSInteger i = 0; for (NSString * title in titles) { UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(0, 0, 30, 30); [btn setTitle:title forState:UIControlStateNormal]; [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; btn.titleLabel.font = SYSTEMFONT(16); [btn setTitleColor:KWhiteColor forState:UIControlStateNormal]; btn.tag = [tags[i++] integerValue]; [btn sizeToFit]; //设置偏移 if (isLeft) { [btn setContentEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; }else{ [btn setContentEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; } UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithCustomView:btn]; [items addObject:item]; [buttonArray addObject:btn]; } if (isLeft) { self.navigationItem.leftBarButtonItems = items; } else { self.navigationItem.rightBarButtonItems = items; } return buttonArray; }
此法实属障眼法,并不完美,经过设置内容偏移,让按钮视觉上看起来位置改变了,实际位置并无发生变化,这可能致使按钮部分区域响应点击事件。
若追求完美,能够试着自定义UIButton
重写hitTest
方法尝试改变点击区域。
如有其余完美的办法请联系我更新。继承
在IOS11,原有的NSLocationAlwaysUsageDeion被降级为NSLocationWhenInUseUsageDeion。所以,在原来项目中使用requestAlwaysAuthorization获取定位权限,而未在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框不会弹出。建议新旧key值都在plist里配置,反正我试下来是没有问题,惟一的区别是使用requestAlwaysAuthorization获取权限 IOS11系统弹框会把几种权限级别所有列出,供用户选择,显然更人性化了。
快去更新你的info.plist
事件
<!-- 位置 --> <key>NSLocationUsageDescription</key> <string>获取地理位置,精准推送服务</string> <!-- 在使用期间访问位置 --> <key>NSLocationWhenInUseUsageDescription</key> <string>获取地理位置,精准推送服务</string> <!-- 始终访问位置 --> <key>NSLocationAlwaysUsageDescription</key> <string>App须要您的赞成,才能始终访问位置</string> <!-- iOS 11访问位置 --> <key>NSLocationAlwaysAndWhenInUseUsageDeion</key> <string>App须要您的赞成,才能始终访问位置</string>
iPhone X 变化最大的是头部 & 底部
非iPhone X :
StatusBar
高20pt,NavigationBar
高44pt,底部TabBar
高49pt
iPhone X:
StatusBar
高44pt,NavigationBar
高44pt,底部TabBar
高83pt
因此,以前项目里写死的 ±49 ±64 都要出问题,若是你以前抽离出来使用的是宏,那问题不大,若是不是,开始搬砖吧少年。
送你几个宏,来日好好撸,莫偷懒ip
#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height #define kNavBarHeight 44.0 //注意:请直接获取系统的tabbar高度,若没有用系统tabbar,建议判断屏幕高度;以前判断状态栏高度的方法不妥,若是正在通话状态栏会变高,致使判断异常,下面只是一个例子,请勿直接使用! #define kTabBarHeight kAppDelegate.mainTabBar.tabBar.frame.size.height #define kTopHeight (kStatusBarHeight + kNavBarHeight)
替换 64pt →kTopHeight
替换 49pt →kTabBarHeight
get
答案在这:适配iPhone X Push过程当中TabBar位置上移
这样能够解决大部分因位置致使的适配问题
请关注点❤️,持续更新……
以上属于臭码农原创,如有雷同属巧合,若有错误望指正,转载请标明来源和做者。
by:臭码农
做者:臭码农 连接:https://www.jianshu.com/p/94d3fdc0f20d 來源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。