神刀安全网

iOS 11 适配(一)UITableViewStyleGrouped 类型 tableVie…

适配 iOS 11 是最近工作中的重中之重,发现的问题也有很多。

UITableViewStyleGrouped 类型的 tableView 在适配的时候出现很大的问题。记录一下

按照之前的方法,只需要执行以下的代码就能够很好的解决 section == 0 的时候,sectionHeader 的高度问题以及 section 间距的问题

tableView.delegate = self;
tableView.dataSource = self;
tableView.tableFooterView = [UIView new];

配合这两种方法

-(CGFloat)tableView:(UITableView)tableView heightForHeaderInSection:(NSInteger)section { return 10.f};
-CGFloat)tableView:(UITableView
)tableView heightForFooterInSection:(NSInteger)section { return 0.01f};

但是,在 iOS 11 上通过这两种方法已经不能解决问题,通过大量的测试,始终发现,在 iOS 10 以下版本中都能够解决问题,但是在 iOS11 上不能够解决问题,经过研究之后发现,通过以下的方法能够良好的解决 sectionHeader 的高度问题,并且是兼容 iOS 10 以及其他版本的

tableView.delegate = self;
tableView.dataSource = self;
tableView.sectionFooterHeight = 0.01f;
tableView.tableFooterView = [UIView new];

  1. 首先,在实例化tableView 的时候,直接声明 sectionFooterHeight,不需要写代理方法
  2. 声明 sectionHeaderView 高度的时候,不能够再像以前一样仅仅声明高度,而是,直接使用比较粗暴的方式,声明一个 view 出来 ,这样就能像从前一样实现效果

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, ViewWidth, 10.0f)];
return headerView;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 10.0f;
}

两种方法必须同时写,不然还是不生效,不知道因为什么,从苹果的官方文档还是没有获取到关于footerView 的更多解释,猜测可能还是在 runtime 的时候,苹果做了不知道的事情

亲测是这样的效果,如果大神能够有更好的解决方式,希望提供,欢迎拍砖

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » iOS 11 适配(一)UITableViewStyleGrouped 类型 tableVie…

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址