谈谈 iOS开发中tableView的重要属性内边距

全屏穿透效果需要做到两点

1.tableView的可视范围占据整个父控件(或者屏幕)--设置contentsize滚动范围。

2.所有的cell都可以被看到,也就是说tableView中的cell不会被导航栏,titleView以及TabBar所遮挡--设置contentInset内边距。

例如:首页控制器的view的第一个子控件是scrollView(添加子控制器视图tableview),而且首页控制器包裹了导航控制器和TabBarController,所以,scrollView的内容上边被挤下来64,下边被挤上去49.

解决方案:

1.可视范围:

  1.1 告诉系统不要自动调整scrollView的内边距

首页控制器:

automaticallyAdjustsScrollViewInsets = NO;

经过这个操作,scrollView的内容(tableView)确实上移了,但是还是预留除了20,这个时候通过打印知道tableView的y值为20,height = 667-20 = 647;

1.2.设置tableView的

tableView.y = 0.

1.3.设置tableView的

tableView.height = scrollView.height;

这个时候就实现了tableView的可视范围为整个scrollView.换句话说tableView和scrollView完全重合.

但是:

新的问题出现了:这个时候的tableView和scrollView完全重合,tableView中的内容(在这里是cell,如果有tableHeaderView的话就包括tableHeaderView)和tableview完全重合.那么就会有一部分cell被导航控制器以及titleView挡住.当下拉下来以后,松手就由弹上去了.内容被遮挡.同样底部也会被TabBar挡住

2.不被导航栏遮住内容:

解决方案:给tableView增加额外的滚动区域,即设置内边距,其中上边设置64(导航条高度)+35(titleView的高度),下边设置49(TabBar高度)

具体代码:

scrollView.contentInset = UIEdgeInsetsMake(64 + 35, 0, 49, 0);

到现在为止完成了所有步骤:

1.通过改变tableView的frame --以及让系统不要自动调整scrollView的内边距让tableView的可视范围为占据整个scrollView

2.通过设置tableView的内边距,让tableView中的所有cell都可以显示,即往下走一个导航栏的高度.

以前介绍tableView的重要属性内边距


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 现在耳边是梅姑在缓缓清唱的<<似是故人来>>,真巧,我刚刚在简书上看了一篇文,其中有句话就给我这种感觉:经济基础决...
    青五阅读 189评论 0 0
  • 当年的会后小记,居然还被某位存着做新年贺礼。如同翻开记忆的相册,告诉你:瞧,旧时的日子过得那么充实。 事过境迁,人...
    苏青葙阅读 339评论 0 0
  • 昨天我说谈朋友的时候最好也不要设计目的,最好还是从相识,到朋友,到好朋友,到情侣这样的路子走下去。然后就有一个关注...
    发疯的然然阅读 262评论 0 1
  • 满天星,漫漫长空无知心。单夜月,冷冷清巷逢知己。思星伴月,方念甜中甜。孤独梦,又有谁相伴...
    67ee03067bed阅读 70评论 0 0