IOS11界面适配问题

向右看齐 2022-06-08 09:49 337阅读 0赞

兴冲冲升级Xcode 9+iOS 11后,发现我的项目变得乱七八糟,主要体现在tableview、导航栏这两个方面;

赶紧逐个查看,发现了以下四个问题:

1.tableview大部分都下移了大概30个像素

2.导航栏的返回按钮下移

3.键盘失去了完成按钮

4.会出现紫色警告,基本上都是如:xxxx must be called from main thread only

![Image 1][]![Image 1][]

如果有我相同问题的,可以往下看

1.tableview大部分都下移了大概30个像素

仔细观察发现带headView的和UITableViewStylePlain类型的不受影响

而Group类型的我都设置了代理方法heightForHeaderInSection,打断点发现这个代理方法没有执行
搜了一堆东西,发现是IOS11默认开启Self-Sizing,如果不实现-tableView: viewForHeaderInSection:和-tableView: viewForFooterInSection: ,则heightForHeaderInSection和heightForFooterInSection都不会被调用,导致它们都变成了默认高度,tableView的estimatedRowHeight、estimatedSectionHeaderHeight、 estimatedSectionFooterHeight这三个高度估算属性由默认的0变成了UITableViewAutomaticDimension,将tableview的预估高度的属性全部设置为0即可,代码如下
tableView.estimatedRowHeight = 0;
tableView.estimatedSectionHeaderHeight = 0;
tableView.estimatedSectionFooterHeight = 0;

我是写了一个tableview的基类,重写

- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{

  1. self = \[superinitWithFrame:framestyle:style\];
  2. if (self) \{
  3. self.estimatedRowHeight =0;
  4. self.estimatedSectionHeaderHeight =0;
  5. self.estimatedSectionFooterHeight =0;
  6. \}
  7. returnself;

}

然后搜索所有用了这个方法的tableview,将他们的类型设置为这个基类,解决

2.导航栏的返回按钮下移

这里是因为我之前用的下面这个方法来隐藏返回按钮的文字

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];

现在我改成在控制器基类中添加并执行以下方法

//将BackBarButtonItem修改为@””

- (void)hideBackBarButtonItem{

  1. /\*\*作用:居中NavBarTitle 原理:修改backbarbuttonitem的title,让其字符串占位少\*\*/
  2. NSArray \*viewControllerArray = \[self.navigationControllerviewControllers\];
  3. long previousViewControllerIndex = \[viewControllerArrayindexOfObject:self\] -1;
  4. UIViewController \*previousVC;
  5. if (previousViewControllerIndex >= 0) \{
  6. previousVC = \[viewControllerArray objectAtIndex:previousViewControllerIndex\];
  7. previousVC.navigationItem.backBarButtonItem = \[\[UIBarButtonItemalloc\]initWithTitle:@""style:UIBarButtonItemStylePlaintarget:selfaction:nil\];
  8. \}

}

解决

3.键盘失去了完成按钮

我的键盘的弹出和落下用了第三方库IQKeyboard,这里更到最新版本即可

4.会出现紫色警告

所有的UI操作都要在主线程中执行,这里我没写让它在主线程执行,所以会出这个警告,如果觉得烦,这个警告可以被屏蔽掉(不推荐屏蔽)

点击Product—->Scheme—->Edit Scheme,把这个Main Thread Checker的勾去掉就可以了![Image 1][]

![Image 1][]

[Image 1]:

发表评论

表情:
评论列表 (有 0 条评论,337人围观)

还没有评论,来说两句吧...

相关阅读

    相关 IOS11界面问题

    兴冲冲升级Xcode 9+iOS 11后,发现我的项目变得乱七八糟,主要体现在tableview、导航栏这两个方面; 赶紧逐个查看,发现了以下四个问题: 1.tablevi

    相关 关于iOS 11

    距离iOS 11正式发布也有小半年了, 陆陆续续也看到许多关于iOS 11和iPhone X适配相关的文章, 现记录下自己做适配所做的工作 首先给出自己适配所用到的宏定义,