关于iOS11下关于UIViewController属性弃用导致含有ScrollView功能的控件出现问题的解决方案
2017-09-22 17:55
501 查看
关于tableView.比如我们某一个页面的tableView的顶部要在statusBar的顶部.也就是屏幕的顶部开始.
有两种解决方案:
1.我们可以设置上面的位置距离顶部是-22(我们知道statusBar的高度是20,但是比如我们设置了热点.那statusBar就变成40了).所以这个解决方案不是很好.
2.我们可以设置ViewController的一个属性:
self.automaticallyAdjustsScrollViewInsets =NO;
设置了这个属性的时候,我们设置tableView到顶部的话就直接怼到顶上了.
然而,到了iOS11.在发布会上记得貌似是那个胖胖的系统工程师讲的(也说了解决方案).上面的这个属性被弃置了.也就是说,这个属性的设置变得无效化了.(亲测).
Xcode9(对应iOS11).新出了一个
@available(iOS 11.0, *)
这个方法来判断本机是多少版本.
我们可以通过这个来判断版本号修复问题
解决方案:
1.建立一个UIViewController的基类:BaseViewController.直接在ViewDidLoad里面写上如下代码:
if (@available(iOS11.0, *)) {
} else {
self.automaticallyAdjustsScrollViewInsets =NO;
}
2.由于滚动的视图都会受影响,那么UITablleView和UICollectionView都需要一个基类...
由于我们可能走的纯代码或者是Xib.那么我们在两个不同的代码里面调用同一份代码.我的建议是写一个setupUI.由于.子类里面可能有不同的变化.
我们可以把setupUI这个方法抛出到.h文件里面.子类用的时候记得要[super setupUI].当然使用分类的方式也不是不可以.
然后.m里面可以这样写:
UITableView:
- (void)awakeFromNib {
[superawakeFromNib];
[self setupUI];
}
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
if (self = [superinitWithFrame:frame
style:style]) {
[self
setupUI];
}
return self;
}
- (void)setupUI {
if (@available(iOS11.0, *)) {
self.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
}
UICollectionView:
- (void)awakeFromNib {
[superawakeFromNib];
[self setupUI];
}
- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout {
if (self = [superinitWithFrame:frame
collectionViewLayout:layout]) {
[self
setupUI];
}
return self;
}
- (void)setupUI {
if (@available(iOS11.0, *)) {
self.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
}
至此.Bug(由于系统版本更新.这种Bug真是坑)完全解决
有两种解决方案:
1.我们可以设置上面的位置距离顶部是-22(我们知道statusBar的高度是20,但是比如我们设置了热点.那statusBar就变成40了).所以这个解决方案不是很好.
2.我们可以设置ViewController的一个属性:
self.automaticallyAdjustsScrollViewInsets =NO;
设置了这个属性的时候,我们设置tableView到顶部的话就直接怼到顶上了.
然而,到了iOS11.在发布会上记得貌似是那个胖胖的系统工程师讲的(也说了解决方案).上面的这个属性被弃置了.也就是说,这个属性的设置变得无效化了.(亲测).
Xcode9(对应iOS11).新出了一个
@available(iOS 11.0, *)
这个方法来判断本机是多少版本.
我们可以通过这个来判断版本号修复问题
解决方案:
1.建立一个UIViewController的基类:BaseViewController.直接在ViewDidLoad里面写上如下代码:
if (@available(iOS11.0, *)) {
} else {
self.automaticallyAdjustsScrollViewInsets =NO;
}
2.由于滚动的视图都会受影响,那么UITablleView和UICollectionView都需要一个基类...
由于我们可能走的纯代码或者是Xib.那么我们在两个不同的代码里面调用同一份代码.我的建议是写一个setupUI.由于.子类里面可能有不同的变化.
我们可以把setupUI这个方法抛出到.h文件里面.子类用的时候记得要[super setupUI].当然使用分类的方式也不是不可以.
然后.m里面可以这样写:
UITableView:
- (void)awakeFromNib {
[superawakeFromNib];
[self setupUI];
}
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
if (self = [superinitWithFrame:frame
style:style]) {
[self
setupUI];
}
return self;
}
- (void)setupUI {
if (@available(iOS11.0, *)) {
self.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
}
UICollectionView:
- (void)awakeFromNib {
[superawakeFromNib];
[self setupUI];
}
- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout {
if (self = [superinitWithFrame:frame
collectionViewLayout:layout]) {
[self
setupUI];
}
return self;
}
- (void)setupUI {
if (@available(iOS11.0, *)) {
self.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
}
至此.Bug(由于系统版本更新.这种Bug真是坑)完全解决
相关文章推荐
- iOS11关于隐藏导航栏后带有scrollView界面出现,下移问题
- 关于VS2010中一打字,换行,拖控件便出现卡死的问题的解决方案
- 关于PC套件显示红外连接出现问题而导致连接不上的解决方案(zz)
- 关于PC套件显示红外连接出现问题而导致连接不上的解决方案(zz)
- 晕倒,狂晕! 关于 winform 用户控件的共有属性的序列化问题 曙光出现了!
- 关于VS编译出现“从不是创建控件 control name 的线程访问它”问题的解决方案
- Ext.Net/ExtJs:关于TextField控件内size、maxLength控制文本框输入字符长度属性失效问题分析以及解决方案
- VS2005对控件重命名时出现问题的解决方案
- 关于IE控件frameset导致GDI对象泄漏的问题
- 关于最近出现的病毒导致桌面无法显示的问题
- 关于Dialer在win7/vista下上网卡在不同USB口来顺插拔导致的dial-up属性意外修改的问题的解决
- 关于桌面进程出现问题的部分解决方案
- 关于Java设置环境变量后的调试出现问题的解决方案
- 关于Preference相关控件修改出现的问题
- 关于“联想”笔记本“无线网功能关闭”的问题的解决方案
- 关于使用<ajax:CascadingDropDown>控件出现的500错误和ScriptManager出现的注册表冲突错误解决方案
- 关于IE控件frameset导致GDI对象泄漏的问题
- 【WPF】对Frame控件的Content属性做绑定时出现的一个小问题
- ASP.NET2.0 GridView控件两大常见问题解决方案:自定义数据分页,类似DataGrid的VirtualItemCount功能
- 关于引用js文件中出现乱码问题的解决方案