iOS实现可以纵向横向滑动的表格实例代码
发布时间 - 2026-01-11 01:59:13 点击率:次本文主要给大家介绍了关于iOS实现可以纵向横向滑动的表格的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

效果图
这个效果是今天公司项目里面遇上的,也是第一次遇见这种需求,所以记录下来,效果如上图。需求主要是可以实现上下的滑动,并且同时最左侧的“线路名称”这一列在向左滑动的时候是不能跟随滚动的。这个功能主要是实现用户可以方便查看关于一下难以看全的列表数据。下面说一下思路。
代码大体思路
由上面的GIF图和基本需求描述我们第一个想到的东西就是万能的tableview,没错,这个功能的完成当然离不开tableview,那么tableview应该怎样发挥它的功力呢,左右侧的信息需要对称,所以在这里我使用了两个tableview,也就是最左侧线路名称这一列是一个tableview,右侧的粉红色字体这些行是一个tableview。上下滑动两者关联是使用scrollview完成的。那接下来就结合代码简单说一下,也方便我以后回头看,哈哈哈。
代码解析
1、这是需要的原材料,每个变量都有注释它的功能了,一眼懂。titleTableView是最左侧的线路名称这一列。infoTableView是粉红色字体这些。contentView是titleTableView和最上方(除了“线路名称”)这一列内容的superView。
@property (nonatomic, strong) UITableView *titleTableView;//标题TableView
@property (nonatomic, strong) UITableView *infoTableView;//内容TableView
@property (nonatomic, strong) UIScrollView *contentView;//内容容器
@property (nonatomic, strong) NSArray *infoArr;//数组
@end
@implementation ViewController {
CGFloat _kOriginX;
CGFloat _kScreenWidth;
CGFloat _kScreenHeight;
}
2、这是所需要的数据配置,我把里面所有需要的数据都放在数组李典里面了。我比较懒。哈哈哈哈
- (void)configData {
_kOriginX = 120;
_kScreenWidth = self.view.frame.size.width;
_kScreenHeight = self.view.frame.size.height;
_infoArr = @[@{@"title":@"出团日期", @"routeName":@"线路名称一", @"time":@"2015/11/21", @"num":@"20", @"price":@"124.0", @"code":@"DAGSDSASA"},
@{@"title":@"余位", @"routeName":@"线路名称二", @"time":@"2015/11/21", @"num":@"34", @"price":@"234", @"code":@"TAGDFASFAF"},
@{@"title":@"价格", @"routeName":@"线路名称三", @"time":@"2015/11/21", @"num":@"12", @"price":@"634", @"code":@"GHGASDAS"},
@{@"title":@"团代号", @"routeName":@"线路名称四", @"time":@"2015/11/56", @"num":@"54", @"price":@"632", @"code":@"DAADSFAD"}];
}
3、分步来看,首先是头部的,这个titleLabel是最左上角的“线路名称”这四个字,contentView的配置,上面说了这个contentView的作用的,从它的frame看出来, _contentView = [[UIScrollView alloc] initWithFrame:CGRectMake(_kOriginX, 0, _kScreenWidth - _kOriginX, _kScreenHeight)];它的x是_kOriginX也就是预留的最左侧的空间。最上面的一列使用for循环创建出来的label。
//MARK:- 头部视图
- (void)configTableHeader {
UILabel *titleLabel = [self quickCreateLabelWithLeft:0 width:_kOriginX title:@"线路名称"];
[self.view addSubview:titleLabel];
_contentView = [[UIScrollView alloc] initWithFrame:CGRectMake(_kOriginX, 0, _kScreenWidth - _kOriginX, _kScreenHeight)];
_contentView.delegate = self;
_contentView.showsVerticalScrollIndicator = NO;
_contentView.showsHorizontalScrollIndicator = NO;
_contentView.contentSize = CGSizeMake(400, _kScreenHeight);
_contentView.bounces = NO;
[self.view addSubview:_contentView];
for (int i = 0; i < _infoArr.count; i++) {
CGFloat x = i * 100;
UILabel *label = [self quickCreateLabelWithLeft:x width:100 title:[[_infoArr objectAtIndex: i] objectForKey:@"title"]];
label.textAlignment = NSTextAlignmentCenter;
[_contentView addSubview:label];
}
}
4、那接下来就是配置最左侧那一栏和左侧粉红色字体那些行。也就这两个tableview创建的。
//MARK:- 详细内容
- (void)configInfoView {
_titleTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 40, _kOriginX, _kScreenHeight) style:UITableViewStylePlain];
_titleTableView.dataSource = self;
_titleTableView.delegate = self;
_titleTableView.showsVerticalScrollIndicator = NO;
_titleTableView.showsHorizontalScrollIndicator = NO;
_titleTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:_titleTableView];
_infoTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 40, 400, _kScreenHeight) style:UITableViewStylePlain];
_infoTableView.delegate = self;
_infoTableView.dataSource = self;
_infoTableView.showsVerticalScrollIndicator = NO;
_infoTableView.showsHorizontalScrollIndicator = NO;
_infoTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[_contentView addSubview:_infoTableView];
}
5、这是tableview的代理方法实现。在cellForRowAtIndexPath这个代理方法中,将两个tableview的cell分开来写。
//MARK:- UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _infoArr.count;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == _titleTableView) {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"titleTable"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"titleTable"];
}
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.text = [[_infoArr objectAtIndex:indexPath.row] objectForKey:@"routeName"];
cell.textLabel.textColor = [UIColor lightGrayColor];
cell.textLabel.font = [UIFont systemFontOfSize:14];
if (indexPath.row%2 == 1) {
cell.backgroundColor = [UIColor colorWithRed:218/255.0 green:218/255.0 blue:218/255.0 alpha:1];
} else {
cell.backgroundColor = [UIColor whiteColor];
}
return cell;
} else {
NSString *ident = @"InfoCell";
InfoCell *cell = [tableView dequeueReusableCellWithIdentifier:ident];
if (!cell) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"InfoCell" owner:nil options:nil] lastObject];
}
if (indexPath.row%2 == 1) {
cell.backgroundColor = [UIColor colorWithRed:218/255.0 green:218/255.0 blue:218/255.0 alpha:1];
} else {
cell.backgroundColor = [UIColor whiteColor];
}
[cell setDataWithStr:[_infoArr objectAtIndex:indexPath.row]];
return cell;
}
}
//MARK:- UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 40;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"选中了%@", [_infoArr[indexPath.row] objectForKey:@"routeName"]);
}
6、这个方法就是实现上下滑动时候,左侧和右侧tableview联动的实现方法。
//MARK:- UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == _titleTableView) {
[_infoTableView setContentOffset:CGPointMake(_infoTableView.contentOffset.x, _titleTableView.contentOffset.y)];
}
if (scrollView == _infoTableView) {
[_titleTableView setContentOffset:CGPointMake(0, _infoTableView.contentOffset.y)];
}
}
总结
啊,写完感觉也是比较简单,就是基本方法的配合使用,当时想的时候也是没有能一下想出来,还是自己基本功不好的原因吧。把这个效果的实现记录在这里,也是为了提醒自己,也就是这个功能比较简单,但是再怎样的功能都是靠最基本的东西堆砌的。思想很重要,但是最重要的还是去实现,光想没有用,人不是靠嘴活的。与君共勉。
代码地址:https://github.com/irembeu/HorizontalSwipListView.git
本地下载地址:http://xiazai./201706/yuanma/ListTableView().rar
总结
以上就是这篇文章的全部内容了,希望本文的内容对给各位iOS开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# ios
# 绘制表格
# 实现表格
# 表格样式
# iOS自动生成表格效果的实现代码
# 这一
# 这是
# 是一个
# 主要是
# 都是
# 都有
# 在这里
# 放在
# 本地下载
# 相关内容
# 第一个
# 也就
# 在这
# 说了
# 最重要
# 我把
# 这两个
# 给大家
# 很重要
# 人不
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
微信推文制作网站有哪些,怎么做微信推文,急?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
如何在阿里云虚拟服务器快速搭建网站?
如何挑选优质建站一级代理提升网站排名?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
如何在局域网内绑定自建网站域名?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Laravel如何为API生成Swagger或OpenAPI文档
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
Python进程池调度策略_任务分发说明【指导】
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
网页设计与网站制作内容,怎样注册网站?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
太平洋网站制作公司,网络用语太平洋是什么意思?
如何在IIS管理器中快速创建并配置网站?
网站页面设计需要考虑到这些问题
简单实现Android文件上传
Laravel观察者模式如何使用_Laravel Model Observer配置
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
简历在线制作网站免费版,如何创建个人简历?
如何批量查询域名的建站时间记录?
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
装修招标网站设计制作流程,装修招标流程?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
手机软键盘弹出时影响布局的解决方法
如何快速上传自定义模板至建站之星?
三星网站视频制作教程下载,三星w23网页如何全屏?
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
如何在阿里云购买域名并搭建网站?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
JavaScript中的标签模板是什么_它如何扩展字符串功能
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
网站制作免费,什么网站能看正片电影?
如何在万网自助建站平台快速创建网站?
如何用好域名打造高点击率的自主建站?
千库网官网入口推荐 千库网设计创意平台入口

