本文正在参加「金石方案」
引言
假如依照开发标准写代码,不会存在关于UITableView的适配问题。
- 假如依照标准使用UITableViewHeaderFooterView,就不会存在iOS16反正屏切换场景的页脚问题。
- 假如依照标准增加UITableViewCell的子企图到UITableViewCellContentView,就不会存在iOS14被遮挡的问题。
- 假如将
tableView:viewForFooterInSection:
和tableView:heightForFooterInSection:
办法都注释掉,就不会存在iOS10即便heightForFooterInSection高度回来0 也会显现视图的问题。
I iOS16.0 反正屏切换适配
调用完转屏办法今后,view需求从头更新frame
1.1 获取当时屏幕反正屏状况
- (UIInterfaceOrientation)interfaceOrientation {// 获取当时屏幕反正屏状况 if (@available(iOS 13.0, *)) { return [UIApplication sharedApplication].windows.firstObject.windowScene.interfaceOrientation; } return [[UIApplication sharedApplication] statusBarOrientation]; }
1.2 iOS16.0调完转屏办法后,需求从头更新view的frame
问题:从电子签名界面回来之后,页脚的frame不正确
-(UIView*)tableView:(UITableView*)tableViewviewForFooterInSection:(NSInteger)section
{
UIButton*nextBtn=[ControlManagergetButtonWithFrame:CGRectMake(KWratio(30),KWratio(25),kWidth-KWratio(60),KWratio(45))fontSize:displayFontSize(15.0f)title:@"提交"titleColor:[UIColorwhiteColor]image:[UIImagenew]backgroundColor:BASE_RED_COLORcornerRadius:KWratio(5)];
returnxxx;
}
原因:iOS16.0调用完转屏办法今后,假如不是使用自动布局,view需求从头更新frame。
处理办法:自定义页脚和页眉(UITableViewHeaderFooterView代替 titleForHeaderInSection)
1.3 自定义页脚
UITableViewHeaderFooterView代替 titleForHeaderInSection
blog.csdn.net/z929118967/…
- 注册FooterView
[_tableViewregisterClass:[CRMNextBtnHeaderFooterViewclass]forHeaderFooterViewReuseIdentifier:@"CRMNextBtnHeaderFooterView"];
- 回来FooterView
-(UIView*)tableView:(UITableView*)tableViewviewForFooterInSection:(NSInteger)section
{
CRMNextBtnHeaderFooterView*footerView=[tableViewdequeueReusableHeaderFooterViewWithIdentifier:@"CRMNextBtnHeaderFooterView"];
//footerView.models=self.viewModel.passwordRuleDescModel;
returnfooterView;
}
- 完成FooterView
@interfaceCRMNextBtnHeaderFooterView:UITableViewHeaderFooterView
@property(nonatomic,weak)UIButton*nextBtn;
@property(nonatomic,weak)UIButton*cancelBtn;
@end
II 处理UITableViewCell兼容问题(iOS14适配)
kunnan.blog.csdn.net/article/det…
2.1 问题剖析
iOS14 UITableViewCell的子企图不能点击或许滑动等手势响应问题,发现有问题的cell根本都是直接增加到Cell的,经过Xcode自带的DebugViewHierarchy视图剖析发现问题的原因是:被体系自带的UITableViewCellContentView遮挡在底部了
2.2 处理方案
需求改标准的做法
cell.contentView.addSubView(tempView1)
全局修正适配
//
//UITableViewCell+CRMaddSubView.m
//Housekeeper
//
//Createdbymacon2020/9/18.
//Copyright2020QCT.Allrightsreserved.
//
#import"UITableViewCell+CRMaddSubView.h"
@implementationUITableViewCell(CRMaddSubView)
+(void)load{
//SwizzleaddSubView
[UITableViewCellsensorsdata_swizzleMethod:@selector(addSubview:)withMethod:@selector(kunnan_addSubview:)];
}
-(void)kunnan_addSubview:(UIView*)view{
if([viewisKindOfClass:NSClassFromString(@"UITableViewCellContentView")]){//答应addSubViewUITableViewCellContentView
[selfkunnan_addSubview:view];//完成办法,由于已经进行了swizzle,相当于调用原来的办法
}else{//
[self.contentViewaddSubview:view];
}
}
@end
III iOS10 体系关于UITableView的适配问题
由于目前根本找不到iOS10的真机了,要测验iOS10 可以下载模拟器。
-
tableView numberOfRowsInSection:QCTReceiptsubFilterViewSection4KeyTypeTitle]
的使用执行次序在iOS10的很特别,不能在在办法中- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
调用,否则会形成死循环。 - heightForFooterInSection 在iOS10 即便高度回来0 也会显现视图
3.1 代理办法的执行次序
tableView:numberOfRowsInSection
不能在办法中 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
调用,否则会形成死循环。
3.2 尾部视图的展示
在iOS10 中不显现viewForFooterInSection的正确做法是,将tableView:viewForFooterInSection:
和tableView:heightForFooterInSection:
办法都注释掉
//-(CGFloat)tableView:(UITableView*)tableViewheightForFooterInSection:(NSInteger)section{
//
//return0;
//
//returnkAdjustRatio(92+10);
//}
//
//-(UIView*)tableView:(UITableView*)tableViewviewForFooterInSection:(NSInteger)section{
//*footerView=[tableViewdequeueReusableHeaderFooterViewWithIdentifier:@""];
//
//footerView.type=self.type;
//footerView.models=self.viewModel.datas[section];
//returnfooterView;
//}