uiswitch样式_Swift - 表格UITableView的plain、grouped两种样式详解(附分组头悬停)

在表格 tableview初始化的时候我们可以指定需要使用的 UITableViewStyle样式,可用的样式一共有两种:.plain和 .grouped。下面分别对它们做介绍。

一、plain模式

1,默认样式

在 plain模式下,如果 tableview有多个 section(分区、分组),组与组之间默认是没有间距的。

同时组头或组尾会有 sticky效果(粘性效果、悬停效果),即表格滚动时组头与组尾会自动停留,而不是跟随单元格一同移动。

      

import UIKit

class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{

var tableView:UITableView?

//分组头标题

var articleHeaders:[String]!

//所有文章标题

var articleNames:Dictionary!

override func loadView() {

super.loadView()

}

override func viewDidLoad() {

super.viewDidLoad()

//初始化数据

self.articleNames = [

0:[String]([

"1、文本标签(UILabel)的用法",

"2、按钮(UIButton)的用法",

"3、文本输入框(UITextField)的用法",

"4、多行文本输入框(UITextView)的用法",

"5、开关按钮(UISwitch)的用法",

"6、分段选择控件(UISegmentedControl)的用法",

"7、图像控件(UIImageView)的用法",

]),

1:[String]([

"1、使用占位符文本placeholder添加文本框提示",

"2、使用autofocus让控件自动获取焦点",

"3、表单客户端验证",

"4、日期和时间选择输入",

"5、颜色选择器",])

]

self.articleHeaders = [

"Swift文章",

"HTML5文章"

]

//创建表视图

self.tableView = UITableView(frame:self.view.frame, style:.plain)

self.tableView!.delegate = self

self.tableView!.dataSource = self

//创建一个重用的单元格

self.tableView!.register(UITableViewCell.self,

forCellReuseIdentifier: "SwiftCell")

self.view.addSubview(self.tableView!)

}

//在本例中,有2个分区

func numberOfSections(in tableView: UITableView) -> Int {

return self.articleHeaders.count

}

//返回表格行数(也就是返回控件数)

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

let data = self.articleNames[section]

return data!.count

}

// UITableViewDataSource协议中的方法,该方法的返回值决定指定分区的头部

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int)

-> String? {

return self.articleHeaders[section]

}

// UITableViewDataSource协议中的方法,该方法的返回值决定指定分区的尾部

func tableView(_ tableView:UITableView, titleForFooterInSection section:Int)->String? {

let data = self.articleNames[section]

return "有\(data!.count)篇文章"

}

//创建各单元显示内容(创建参数indexPath指定的单元)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)

-> UITableViewCell {

//为了提供表格显示性能,已创建完成的单元需重复使用

let identify:String = "SwiftCell"

//同一形式的单元格重复使用,在声明时已注册

let cell = tableView.dequeueReusableCell(withIdentifier: identify,

for: indexPath)

cell.accessoryType = .disclosureIndicator

var data = self.articleNames[indexPath.section]

cell.textLabel?.text = data![indexPath.row]

return cell

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

}

}

2,调整分组间的间距

如果需要设置组与组之间的间距,可以通过 viewForHeaderInSection、viewForFooterInSection、heightForHeaderInSection或 heightForFooterInSection这几个方法配合实现。

3,去除分组头、分组尾的停留效果

这个通过重写 tableView的 scrollViewDidScroll方法可以实现。要注意的是页面是否有导航控制器,有的话要把自动内边距调整给考虑进去。

(1)分组头部不悬停

//header不悬停

func scrollViewDidScroll(_ scrollView: UIScrollView) {

//组头高度

let sectionHeaderHeight:CGFloat = 30

//获取是否有默认调整的内边距

let defaultEdgeTop:CGFloat = navigationController?.navigationBar != nil

&& self.automaticallyAdjustsScrollViewInsets ? 64 : 0

if scrollView.contentOffset.y >= -defaultEdgeTop &&

scrollView.contentOffset.y <= sectionHeaderHeight - defaultEdgeTop {

scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0)

}

else if (scrollView.contentOffset.y>=sectionHeaderHeight - defaultEdgeTop) {

scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight + defaultEdgeTop,

0, 0, 0)

}

}

(2)分组尾部不悬停

//footer不悬停

func scrollViewDidScroll(_ scrollView: UIScrollView) {

//组尾高度

let sectionFooterHeight:CGFloat = 30

//获取是否有默认调整的内边距

let defaultEdgeTop:CGFloat = navigationController?.navigationBar != nil

&& self.automaticallyAdjustsScrollViewInsets ? 64 : 0

let b = scrollView.contentOffset.y + scrollView.frame.height

let h = scrollView.contentSize.height - sectionFooterHeight

if b <= h {

scrollView.contentInset = UIEdgeInsetsMake(defaultEdgeTop, 0, -30, 0)

}else if b > h && b < scrollView.contentSize.height {

scrollView.contentInset = UIEdgeInsetsMake(defaultEdgeTop, 0, b - h - 30, 0)

}

}

(3)分组头部、尾部均不悬停

//header、footer均不悬停

func scrollViewDidScroll(_ scrollView: UIScrollView) {

//组头高度

let sectionHeaderHeight:CGFloat = 30

//组尾高度

let sectionFooterHeight:CGFloat = 30

//获取是否有默认调整的内边距

let defaultEdgeTop:CGFloat = navigationController?.navigationBar != nil

&& self.automaticallyAdjustsScrollViewInsets ? 64 : 0

//上边距相关

var edgeTop = defaultEdgeTop

if scrollView.contentOffset.y >= -defaultEdgeTop &&

scrollView.contentOffset.y <= sectionHeaderHeight - defaultEdgeTop {

edgeTop = -scrollView.contentOffset.y

}

else if (scrollView.contentOffset.y>=sectionHeaderHeight - defaultEdgeTop) {

edgeTop = -sectionHeaderHeight + defaultEdgeTop

}

//下边距相关

var edgeBottom:CGFloat = 0

let b = scrollView.contentOffset.y + scrollView.frame.height

let h = scrollView.contentSize.height - sectionFooterHeight

if b <= h {

edgeBottom = -30

}else if b > h && b < scrollView.contentSize.height {

edgeBottom = b - h - 30

}

//设置内边距

scrollView.contentInset = UIEdgeInsetsMake(edgeTop, 0, edgeBottom, 0)

}

二、grouped模式

1,默认样式

在 grouped模式下,如果 tableview有多个 section(分区、分组),组与组之间默认是有间距的。

而且在表格滚动的同时组头与组尾会随之滚动、不停留,不会有 sticky效果(粘性效果、悬停效果)。

下面分别是:分区头尾均有、只有分区头、分区头尾都没有。这三种情况:

      

      

2,去掉多余的间距

(1)在分组头、分组尾都存在时,可以将 tableview最上方的间距给去除。

//去除表格上放多余的空隙

self.tableView?.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)

(2)如果只有分组头,没有分组尾,除了将 tableview最上方的间距给去除,还可以将分组尾的高度设置为 0.01(不能设为 0,否则无效)。同时还要将分组尾设置成一个空的 UIView(否则在 iOS11 下分组尾高度不会起作用)。

//去除表格上放多余的空隙

self.tableView?.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)

//设置分组尾的高度

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {

return 0.01

}

//将分组尾设置为一个空的View

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {

return UIView()

}

(3)如果分组头、分组尾均没有,还可以将分组头的高度设置为 0.01。

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

return 0.01

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全志线刷工具如何刷linux,全志 Allwinner V3S 开发环境搭建 (二)安装必要工具

1、libncurses5-devsudo apt-get install libncurses5-devmake menuconfig 配置工程时用到2、GITsudo apt-get install git下载github仓库时使用3、arm-linux-gnueabihf编译工具链下载&#xff1a;wget https://releases.linaro.org/components/toolchain/binaries/latest/arm-…

excel怎么启用宏_IT技巧分享51: 解决打开Excel文件提示发现不可读取的内容

在使用过程中难免会碰到一些棘手的问题&#xff0c;比如&#xff1a;Excel打不开&#xff0c;提示为不可读取内容&#xff0c;当遇到这些问题我们改怎么处理呢&#xff1f;经百度一下发现主要原因是因为引用了外部文档数据、指向了外部文档中的宏等等。造成故障的原因&#xff…

python输出矩阵的转置_Python 矩阵转置的几种方法小结

我就废话不多说了&#xff0c;直接上代码吧&#xff01;#Python的matrix转置matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]]def printmatrix(m):for ele in m:for i in ele:print("%2d" %i,end " ")print()#1、利用元祖的特性进行转置def transformMatrix(m…

linux加一个2t硬盘吗,在linux下新增一块硬盘的操作。(包含大于2T的硬盘在linux下挂载操作)...

扩展后执行fdisk -l查看是否成功[rootlocalhost ~ ]# fdisk - lDisk / dev / sda: 16.1 GB, 16106127360 bytes255 heads, 63 sectors / track, 1958 cylindersUnits cylinders of 16065 * 512 8225280 bytesDevice Boot Start End …

JQ 全选后获取选中的值_JQ完全学习版本

获得input标签中name属性名字包含a 的标签对象书写。Function(“input[name * a]”)$("input:disabled")这个选择器的作用Input下隐藏的对象$(":input")和$("input");这两个选择器的区别前者是表单的内容&#xff0c;后者是所有input标签获得一个…

audio h5 src 变了之后_我在叩丁狼学H5

#我在叩丁狼学H5#最近接触到了一些前端框架&#xff0c;像Vue.js&#xff0c;React&#xff0c;发现小程序的框架体系跟它们很像。它们都推崇模块化&#xff0c;组件化&#xff0c;数据与元素绑定。这样没有繁琐的DOM操作&#xff0c;组件之间完全分离&#xff0c;样式和逻辑全…

linux的samb配置文件,Linux系统如何配置samba文件服务器?

安装samba服务软件包.1.确认当前系统中至少安装有samba、samba-client、samba-common这三个软件包,命令如下:[rootlinux-01~]#rpm-qa|grepsambasamba-common-3.0.33-3.7.el5samba-3.0.33-3.7.el5samba-client-3.0.33-3.7.el52.有时在安装samba包时可能会出现下面的错误提示:[ro…

依据imu姿态角计算z轴倾角_1. 姿态的表示方法

刚体的姿态&#xff08;attitude&#xff09;有很多种表示方法&#xff0c;关于这个话题有一篇十分出名的综述[1]&#xff0c;也是这篇文章的主要资料来源。这篇文章从二维旋转开始&#xff0c;会讨论旋转矢量、旋转矩阵、四元数、欧拉角等旋转的表示方法。在开始讨论前&#x…

c# mongodb or查询_C# MongoDB 查询方法

public List GetCollectionByBillCode(string BillCode){List list new List();// 根据集合名称获取集合string collectionFullName ConfigurationManager.AppSettings["collectionName"];var collection _database.GetCollection(collectionFullName);var quert …

linux nacos启动_Nacos集群安装配置

上篇文章讲到Nacos从v1.3.2开始&#xff0c;windows系统启动脚本默认改成了集群模式(也就是不带参数"-m standalone")&#xff0c;那么如果双击startup.cmd启动就会失败。这篇文章我们就来讲讲Nacos集群安装。需要安装MySQL安装MySql这里就不讲了&#xff0c;大家找度…

linux 动态库静态库,Linux下的动态库与静态库

2019-09-25关键字&#xff1a;生成库、静态库引用、动态库引用在 C 开发中&#xff0c;“库”是一个经常听到的名词。所谓的库其实就是一个二进制文件。这个二进制文件的内容是可被其它C程序调用执行的函数。换句话说&#xff0c;库就是一组C代码的打包形式而已&#xff0c;打包…

西门子plm_西门子的Teamcenter、TIA Portal、NX MCD是如何结合在一起的

写在面前大家好&#xff0c;我是小智&#xff0c;智能制造之家号主~我一直PLM、MESMOM、SCADA、PLC等提倡融合(理念不一定对哈&#xff0c;大家理性看待&#xff0c;不必喷我)&#xff0c;希望每个领域的朋友&#xff0c;在自己努力之余&#xff0c;抬头看看窗外的世界&#xf…

状态机 python_Python状态机设计

我真的不明白这个问题。设计模式非常清晰。请参阅Design Patterns book。class SuperState( object ):def someStatefulMethod( self ):raise NotImplementedError()def transitionRule( self, input ):raise NotImplementedError()class SomeState( SuperState ):def someStat…

linux games账号,linux for games

linux for games最近对linux 游戏发行版系统产生了兴趣&#xff0c;下面简要记录一些链接&#xff1a;https://itsfoss.com/linux-gaming-distributions/ (9 款游戏系统)https://fedoraproject.org/wiki/Games_Lab (fedora 游戏发行版 wiki)https://thishosting.rocks/best-lin…

jpa 自定义sql if_mybatis仿jpa 使用@createDate @updateDate

最近在使用mybatis的时候发现一个问题,就是好多的时候保存实体的时候&#xff0c;都要set create 和update,这样很麻烦&#xff0c;有没有可能类似jap 使用注解自动生成。jpa 的注解原理也拦截sql ,把sql 里面的参数绑定给修改一下。 了解了原理&#xff0c;我们也就自己可以可…

linux系统每月定时重启,linux系统定时重启.doc

linux系统定时重启linux系统定时重启--------------------每个月1号凌晨3点自动重启步骤如下&#xff1a;1、用root帐号登陆&#xff1b;2、打开终端窗口&#xff1b;3、输入"crontab -e"4、按Insert键。5、输入"0 3 1 * * reboot"6、按esc键。7、输入&quo…

卡牌大师怎么玩_用卡牌大师如何上分

联盟界流传一句话&#xff0c;如果只玩一个英雄。德玛可以上白金&#xff0c;瑞文可以上砖石&#xff0c;而卡牌可以上王者。所以说玩好卡牌是可以快速上分的&#xff0c;卡牌拥有稳定的控制&#xff0c;AOE伤害&#xff0c;大招的快速支援&#xff0c;可以说是英雄里近乎完美的…

直线电机原理动画_最新的3D动画演示:同步电机原理及技术,一般人看不懂

据说每台交流电机都使用旋转磁场&#xff0c;这项发明掀起了工业革命。分享一下LearnEngineering最新制作的一个动画&#xff0c;讲解的是同步电机RMF的工作原理和技术发展&#xff1a;同步电动的工作原理是&#xff1a;RMF旋转磁场相互作用。恒速特性是通过恒定磁场和旋转磁场…

l2的最优回归_大白话5分钟带你走进人工智能-第15节L1,L2几何解释和Ridge等回归...

第15节 L1和L2正则几何解释和Ridge&#xff0c;Lasso&#xff0c;Elastic Net回归上一节中我们讲解了L1和L2正则的概念&#xff0c;知道了L1和L2都会使不重要的维度权重下降得多&#xff0c;重要的维度权重下降得少&#xff0c;引入L1正则会使不重要的w趋于0(达到稀疏编码的目的…

用python绘制图形_python绘制图形

1 2 File Name&#xff1a; draw3 Author&#xff1a; tim4 Date&#xff1a; 2018/8/15 16:475 Description&#xff1a; 图形绘制。十分有用&#xff0c;对于工作中实验性的项目&#xff0c;可以快速展示效果。如果使用java&#xff0c;还需要配合前端展示。6 7 8 importma…