欢迎来真孝善网,为您提供真孝善正能量书籍故事!

iPhone iOS11升级适配:详解UITableView偏移问题解决方案

时间:11-08 神话故事 提交错误

//视图控制器

UITableView *tv=[[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

电视.delegate=self;

电视.dataSource=self;

[self.view addSubview:tv];vc.bouns 没有navbar.png 没有NavBar,什么都不设置,最简单的情况。左边是iOS 8,右边是iOS 11。发现iOS 8没有下移,iOS 11有20像素的下移。

在iOS 11 中,决定tableView 的内容和边缘之间的距离的是adjustmentContentInset 属性。

在iOS 11中,出现了安全区域的新概念。由于顶部有状态栏,系统自动计算tv.adjustedContentInset 值为{20, 0, 0, 0}。这会导致电视向下移动20 像素。

//应用委托

self.window.rootViewController=[[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];

//视图控制器

UITableView *tv=[[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

电视.delegate=self;

电视.dataSource=self;

[self.view addSubview:tv];vc.bouns 有navbar.png

两者都向下偏移64 像素。

在iOS 11 下,控制器具有automaticAdjustsScrollViewInsets 属性,默认为YES。 @property(nonatomic,assign) BOOL 自动调整ScrollViewInsets

API_DEPRECATED("使用UIScrollView 的contentInsetAdjustmentBehavior 代替", ios(7.0,11.0),tvos(7.0,11.0)); //默认为YES 当该属性设置为YES 时,系统将自动向下偏移电视。

在iOS 11中,可以看到automaticallyAdjustsScrollViewInsets属性被废弃了,但是为什么还是向下偏移了64像素。原因是一样的。当前的安全区域已经变成了NavBar下方,tv.adjustedContentInset也改为了{64,0,0,0},所以也向下偏移了64。

//应用委托

self.window.rootViewController=[[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];

//视图控制器

UITableView *tv=[[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

电视.delegate=self;

电视.dataSource=self;

[self.view addSubview:tv];

self.automaticallyAdjustsScrollViewInsets=NO;vc.bouns 与导航栏自动AdjustsScrollViewInsets=NO.png

三是二的反例。设置self.automaticallyAdjustsScrollViewInsets=NO;iOS 11以下不会偏移。

//应用程序委托

self.window.rootViewController=[[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];

//视图控制器

self.tv=[[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

self.tv.delegate=self;

self.tv.dataSource=self;

[self.view addSubview:self.tv];

如果(@可用(iOS 11.0,*)){

self.tv.contentInsetAdjustmentBehavior=UIScrollViewContentInsetAdjustmentNever;

} 别的{

self.automaticallyAdjustsScrollViewInsets=NO;

}vc.bouns has navbarautomaticAdjustsScrollViewInsets=NO UIScrollViewContentInsetAdjustmentNever.png 通过将tv.contentInsetAdjustmentBehavior 设置为UIScrollViewContentInsetAdjustmentNever,可以阻止系统计算adjustmentContentInset 值。结果,电视不再偏移。

//应用委托

self.window.rootViewController=[[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];

//视图控制器

self.navigationController.navigationBar.hidden=YES;

self.view.backgroundColor=[UIColor 黄色颜色];

self.tv=[[UITableView 分配] initWithFrame:CGRectMake(0, 64, self.view.bounds.size.width, self.view.bounds.size.height - 64) style:UITableViewStylePlain];

self.tv.delegate=self;

self.tv.dataSource=self;

[self.view addSubview:self.tv];y=64 隐藏NavBar.png

有时您需要自定义导航控制器。在这种情况下,您需要隐藏内置导航栏。发现在iOS 11以下的系统中,电视仍然会偏移20个像素。 iOS 11 没有问题。

解决办法仍然是将automaticAdjustsScrollViewInsets设置为NO。

iOS 11之前的 automaticallyAdjustsScrollViewInsets

我觉得这个房产很有趣。

1 无NavBar

当没有设置NavigationController时,即NavBar不存在时,该属性不会发挥作用,tv不会出现偏移问题。

2 有NavBar

2.1 显示NavBar

设置NavigationController 时,导航栏不会隐藏,默认会向下偏移64 像素。而且无论您的导航栏是否挡住了电视,它都会发生偏移。下图tv.y=64

tv,y=64.png

2.2 不显示NavBar

当设置NavigationController并且隐藏NavBar时,默认会向下偏移20像素。并且和2.1一致,无论电视边框是什么,都会有偏移。下图tv.y=64

tv,y=64 Hide NavBar.png

如果你嫌这个属性麻烦,就设为NO,然后手动管理tv的frame。

总结

经过上面的实验,我个人认为有更好的方法来解决UIScrollView偏移问题。只需在代码中添加如下代码即可:

如果(@可用(iOS 11.0,*)){

self.tv.contentInsetAdjustmentBehavior=UIScrollViewContentInsetAdjustmentNever;

} 别的{

self.automaticallyAdjustsScrollViewInsets=NO;

用户评论

把孤独喂饱

真希望官方能尽快解决这个 UITableView 的偏移问题!

    有18位网友表示赞同!

从此我爱的人都像你

我升级到 iOS11 后好多 App 都出现表格内容显示错误,真是太烦人了...

    有9位网友表示赞同!

南宫沐风

还在寻找解决方案,不知道有没有更靠谱的做法?

    有20位网友表示赞同!

娇眉恨

看了一下代码,好像 iOS 11 对 UITableView 的布局算法有所调整了。

    有10位网友表示赞同!

怀念·最初

好想看看具体是哪里的适配问题,能不能分享一下相关的代码片段?

    有16位网友表示赞同!

别在我面前犯贱

我遇到了同样的问题,希望这个记录能给我一些启示!

    有20位网友表示赞同!

煮酒

升级到 iOS 11 后很多 App 都出现了这个问题,是不是更新太仓促了?

    有8位网友表示赞同!

蔚蓝的天空〃没有我的翅膀

以前没遇到过这种偏移,真是让人头痛。

    有14位网友表示赞同!

拽年很骚

iOS 11 对 UI 设计要求又提高了一级?!

    有18位网友表示赞同!

单身i

如果能找到解决办法,那简直是福音啊!

    有12位网友表示赞同!

青袂婉约

不知道其他开发者有没有遇到类似问题?

    有20位网友表示赞同!

我绝版了i

这篇文章很有帮助,让我对 iOS 11 的表格适配有了更深入的理解。

    有17位网友表示赞同!

稳妥

我得赶紧去看一下自己的 App 代码了,看看有没有需要注意的地方。

    有13位网友表示赞同!

情字何解ヘ

iOS 开发越来越难了,需要花更多的时间来调试和优化!

    有6位网友表示赞同!

厌归人

希望以后苹果能改进 iOS 更新策略,减少这类问题发生.

    有6位网友表示赞同!

暮光薄凉

这个记录太棒了! 可以帮我加速解决我的表格适配问题!

    有17位网友表示赞同!

【iPhone iOS11升级适配:详解UITableView偏移问题解决方案】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活