iOS 11 tableView顶部多出一片空白区域
来源:互联网 发布:.cn域名的ns记录 查询 编辑:程序博客网 时间:2024/05/22 00:43
苹果向来都是出个bug让开发者填坑,这不弄了个iPhone X的异形屏幕,既要考虑顶部的齐刘海,又要考虑底部的home条。现在不光是iPhone X的屏幕问题,iOS 11的SDK也有好多改变,其中影响最大的莫过于tableView的改动。
很多开发者发现了,用iOS 11的SDK运行程序后tableView变得自己都不认识了。
首先是在iOS 11中,tableView关于footerr的两个代理方法必须成对出现,不然就会有问题。这里以footer为例,header同理。
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
这两个方法只要出现一个,另一个就必须写上。不然footer的高度就无法控制了。。
其次,很多人发现自己的tableView下移了64个像素。
在iOS11之前,如果想要scrollView不偏移64p,则需设置automaticallyAdjustsScrollViewInsets=NO,但是这个属性在iOS11直接被遗弃了。。
多出了一个新属性contentInsetAdjustmentBehavior,类型是UIScrollViewContentInsetAdjustmentBehavior。看起来这和iOS11搞的safeArea有关,这个先放一边,看看怎么适配(一种简单方案):
if (@available(iOS 11.0, *)) { _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;} else { // Fallback on earlier versions self.automaticallyAdjustsScrollViewInsets = NO;}
我们来看一下这个新的属性:
typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) { UIScrollViewContentInsetAdjustmentAutomatic, // Similar to .scrollableAxes, but will also adjust the top & bottom contentInset when the scroll view is owned by a view controller with automaticallyAdjustsScrollViewContentInset = YES inside a navigation controller, regardless of whether the scroll view is scrollable UIScrollViewContentInsetAdjustmentScrollableAxes, // Edges for scrollable axes are adjusted (i.e., contentSize.width/height > frame.size.width/height or alwaysBounceHorizontal/Vertical = YES) UIScrollViewContentInsetAdjustmentNever, // contentInset is not adjusted UIScrollViewContentInsetAdjustmentAlways, // contentInset is always adjusted by the scroll view's safeAreaInsets} API_AVAILABLE(ios(11.0),tvos(11.0));
下面是一种大神的解决方案,是从网上找的:
#define adjustsScrollViewInsets_NO(scrollView,vc)\do { \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \ if ([UIScrollView instancesRespondToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\ [scrollView performSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)];\ } else {\ vc.automaticallyAdjustsScrollViewInsets = NO;\ }\ _Pragma("clang diagnostic pop") \} while (0)
这种方法是利用了宏定义。但是在iOS 11的SDK中,我发现有的时候宏定义或者全局变量的值并不是我所期望的值,使用NSLog打印的值跟通过计算后得到的值匹配不上。我不确定这是Xcode9的bug还是其他什么原因,特别是计算frame的时候,明明单独打印这几个宏定义的值都对,但是把这几个宏定义进行计算,得到的结果却是错误的。。如果有人遇到了同样的问题,麻烦私信我一下。。一起探讨探讨。
最后希望所有的APP都紧跟苹果步伐。抛弃旧的系统。。
- iOS 11 tableView顶部多出一片空白区域
- iOS-80-解决主页tableview顶部多出一块
- 三十一,iOS 11系统下tableView顶部多出一些留白的解决方法
- iOS 11 系统下tableView顶部多出一些留白的解决方法
- tableView(group)设置顶部空白区域
- tableView去掉顶部上部空表区域
- tableView 顶部高出一部分解决方法
- tableView 顶部高出一部分解决方法
- iOS 双击tableView回顶部
- TableView的顶部有一部分空白区域,不是Cell
- iOS:tableView表视图顶部多余部分
- iOS tableview距离顶部有一段空白
- IOS:tableView顶部留有空白的学习
- iOS开发-tableView顶部图片拉伸
- iOS-tableview顶部拉伸效果(头像拉伸)
- iOS --TableView与NavigationBar中间多出空白间隔
- 多个tableView点击状态栏返回顶部
- iOS tableview de顶部被navigationbar遮住的问题
- ViewPager和小圆点联动
- luogu P2587 [ZJOI2008]泡泡堂
- ios版本更新提示
- 【云计算的1024种玩法】第1招:制作一个浪漫的表白网页
- maven
- iOS 11 tableView顶部多出一片空白区域
- Android Tablayout 结合ViewPager实现滑动界面
- ofbiz总结——xml中变量与groovy、BeanShell脚本中变量作用域
- Android加载本地网页
- TCP/IP第四层--传输层TCP数据报文详解
- Andorid--RecyclerView与CardView实现卡片列表
- 美斥$10亿巨资于伦敦九榆树打造!
- js获取html标签
- 加密解密工具类