黑客技术 点击右侧关注,了解黑客的世界!

Java开发进阶 点击右侧关注,掌握进阶之路!

Linux编程 点击右侧关注,免费入门到精通!

作者丨chaolongsz
https://juejin.im/post/5d2e1b64f265da1b8812108c

初衷

早年我曾想实现一个类似 iPad 设置页面右方的 tableView 的风格。它的特点主要是在整个分组设置圆角,如下图所示

难点

由于 Section 并不是一个真实存在的 View,而是 tableView 便于管理设计的一个逻辑容器。那么如何对整个 Section 设置圆角呢?

还有,如果要利用 tableViewCell 的自带元素,那么 Cell 与父视图应该有一定的 padding,且高亮不能是完整的一行,这个也是我当初没考虑到的。

方案

当时在网上找了两种方案,一种是计算好 Section 的位置,在底下添加白底。

一种是在把每个 Section 当做一个 Row 处理,这样的坏处是要自己处理点击高亮,而且没有很好复用 Cell。

现在看来,这两种方案都不太优雅。

我想到了第三种方案,大概是这样的:Section 第一个 Cell 设置左上、右上圆角,最后一个 Cell 设置左下,右下边角,如果只有一个 Cell,设置全部圆角。

实现

首先,Row 的宽度不需要占满整个行,所以我需要对 Cell 的位置进行调整,调整完毕之后,设置圆角,圆角可以分3种情形来设置,还有一种不设置的情况。

调整 Cell 的位置

一开始,我设置了 tableView 的 contentInsets 属性,结果却让 tableView 可以左右滑动了,因为 tableView 继承于 scrollView,只不过他的 contentSize 的宽度与 frame 的宽度一致才没有左右滑动,设置了 contentInsets 的左右边距之后,tableView 不再跟预想一样了。

想想我的目标:调整 tableViewCell 的宽度,使之的 x 坐标不为 0。

那么这个任务就好办了,我可以在 layoutSubviews 里面去操作,反正任何布局代码都会到这里来,包括通过 AutoLayout 设置的布局。

然后我自定义了一个 TableViewCell,从而能够自定义 layoutSubviews 操作:

设置圆角

通过 Google,很容易找到了设置部分圆角的办法,然后我在此基础上添加了一个不设置圆角的方法以避免复用问题

经过刚才的分析,把这4种状态作为一个枚举:

然后在 layoutSubviews 里面设置就行了。由于这种圆角是通过 mask 设置的,不会造成离屏渲染问题,可以放心使用。

同时,需要在 tableViewCell 的数据源指定这个位置:

然后,再自定义分割线,细调一下,就OK啦!

 推荐↓↓↓ 

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

万水千山总是情,点个 “ 在看” 行不行

tableView 如何对整个 Section 设置圆角相关推荐

  1. tableView 获取网络图片,并且设置为圆角(优化,fps)

    代码地址如下: http://www.demodashi.com/demo/11088.html 一.准备工作 例子比较精简,没有什么特殊要求,具备Xocde8.0左右版本的就好 二.程序实现 1.相 ...

  2. 【响应式Web前端设计】css如何设置边框的圆角样式?border-radius属性设置圆角样式(图 文)

    border-radius包含5种设置圆角样式方式: border-radius :同时设置4个边框的圆角样式. border-top-left-radius :设置左上角边框的圆角样式. borde ...

  3. xib 设置阴影_使用“IBInspectable”XIB设置圆角、边框、阴影

    iOS开发中使用xib和storyboard可以节约大量的写UI代码的时间.这也是苹果官方比较推荐的方式.不过使用IB的方式来布局页面难免遇到一些需要设置圆角(cornerRadius).阴影(sha ...

  4. UIButton设置圆角和边框及边框颜色

    为什么80%的码农都做不了架构师?>>>    UIButton设置圆角和边框及边框颜色 [box.actionButton.layer setMasksToBounds:YES]; ...

  5. 设置圆角、定向设置圆角-按钮等控件

    为什么80%的码农都做不了架构师?>>>    //定向设置圆角UIBezierPath *maskPath = [UIBezierPath bezierPathWithRounde ...

  6. IOS启程06—iOS设置圆角图片

    iOS设置圆角的三种方式 1 方法一 通过设置layer的属性 UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMak ...

  7. iOS一个简单的设置圆角不引起性能问题的分类

    http://www.cocoachina.com/articles/18756 iOS设置圆角矩形和阴影效果 https://www.cnblogs.com/rayshen/p/4900336.ht ...

  8. html表格怎么改圆角边框,Table元素设置圆角border

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Table元素设置圆角border-radius 首先,我们先对border-collapse属性进行简单的了解. 有以 ...

  9. IOS中设置圆角图片

    2019独角兽企业重金招聘Python工程师标准>>> ##iOS设置圆角的三种方式 <hr/> 1 方法一 通过设置layer的属性 UIImageView *imag ...

最新文章

  1. 菜鸟实时数仓2.0进阶之路
  2. python【蓝桥杯vip练习题库】BASIC-11 十六进制转十进制
  3. C语言再学习 -- 位、字节、字、字长、字元的关系
  4. 【项目源码分享】基于C++实现的网店购物管理系统(VS2019控制台)
  5. 【数字逻辑 Verilog】全面剖析数据选择器——从基础到拓展,从理论到设计的实现,从表面到本质
  6. Hidden Markov Model
  7. RFC2616中文版(8)连接
  8. python findall_Python 正则表达式:findall
  9. Mutes锁_递归锁_信号量semaphore
  10. 联想Y7000安装双系统(Windows10与Ubuntu16.04)
  11. 分享100个PHP源码整站系统,总有一款适合你
  12. 如果在网上匿名15分钟
  13. Iptables入门
  14. nginx: [warn] conflicting server name locahost on 0.0.0.0:80, ignored
  15. python输出数组类型_python输出数组中指定元素的所有索引示例
  16. 皮克定理,多边形面积以及线段上整点个数
  17. clientX,clientY,screenX,screenY,offsetX,offsetY 区别测试
  18. CDN基于谷歌开源Katran四层负载均衡方案的应用 - 原理篇
  19. 好用的项目研发管理系统6个功能特征,这些企业都在用!
  20. F - Color the ball

热门文章

  1. java抽取公共方法的诀窍_Web服务编程技巧和窍门,Java应用程序的旧式集成技术...
  2. 135编辑器第二季校园新媒体文案排版大赛(西部站)开始啦!
  3. 【itchat】基于web端微信 的微信个人号接口
  4. 51单片机之IO口扩展——74HC595芯片串行转并行实验
  5. 深信服C++开发岗校招笔试题-笔试经历
  6. 已知圆上一点P1,求转动一定角度后P2的坐标
  7. 巴可放映机服务器型号怎么看,巴可放映机根据影片怎么选择通道,JPEG和MPEG分别是什么,...
  8. 易忘知识点整理(持续更新)——VUE使用
  9. 从pytorch模型到wk
  10. keil中添加stc单片机芯片包的方法