之前看到Apple store里面有横向的tableview,当然也有可能是collectionview啦。

尤其是项目中只有一条那么需要横向滑动的东西,就没有必要使用庞大的collectionview了,点缀的使用一下横向的tableview反而更方便和灵活。当然此处大部分的情况可能是在父tableview的cell中使用个横向的tableview。

下面就简单的介绍一下,基于系统原生的UITableView封装横向tableview的要点。

我封装tableview的时候主要使用了一种比较流行的方法,tableview旋转-PI/2个单位的弧度(即逆时针旋转90度),cell旋转PI/2个单位弧度(即顺时针旋转90度)。这样的最终结果就是tableview成为了横向的。封装的过程中有一个地方比较难以理解的,就是横向的tableview的point问题,因为旋转,默认的是以tableview的中心点旋转,这样就造成了旋转后“看起来”的位置或者说Frame发生了改变,所以要修复这个因为旋转造成的“Frame偏差”。此处,你可以拿着你的手机,竖着放在一张竖着的A4纸上面,手机的左上角与A4纸左上角重合,意味着point为(0,0),然后你把手机逆时针旋转90度,看看有什么结果,结果应该是,手机左面突出了A4纸一部分,上面也距离纸的顶边一定的距离。那么这个距离是多少呢,应该就是长的二分之一减去宽的二分之一,具体的代码就是这样写的ABS(self.bounds.size.width - self.bounds.size.height) / 2,就不解释为什么是这个值了,因为我不知道言语怎么表达,我也找不到合适的画图工具。自己体验一下就能体会到。

所以此时的横向tableview向右向上都偏移  ABS(self.bounds.size.width - self.bounds.size.height) / 2  这个距离就好了。

剩下的就是封装的时候,实现UITableView的回调了,UITableView的必须实现的回调就必须实现了,然后非必需的也可以二次封装,此时还可以给一个默认的的值,以便不实现改回调时该轮子能给出默认的值,如下面的这个样子:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([self.delegate_Y respondsToSelector:@selector(h_tableView:heightForRowAtIndexPath:)]) {
return [self.delegate_Y h_tableView:self heightForRowAtIndexPath:indexPath];
}
return ;
}

必须实现的回调也贴出来一下吧:

 #pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if ([self.dataSource_Y respondsToSelector:@selector(h_tableView:numberOfRowsInSection:)]) {
return [self.dataSource_Y h_tableView:self numberOfRowsInSection:section];
}
return ;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([self.dataSource_Y respondsToSelector:@selector(h_tableView:cellForRowAtIndexPath:)]) {
return [self.dataSource_Y h_tableView:self cellForRowAtIndexPath:indexPath];
}
return nil;
}

不用仔细看代码也没问题,最后我会贴出coding的链接,可以去下载源码看看

因为UITableView的回调,太多了,我就封装了几个,如果你需要更多的,可以另行的仿照实现。

说了这么多,再说说这个轮子的弱点吧,因为在使用xib或者storyboard拖约束布局的时候会产生问题,所以代码中,默认的注释掉了- (instancetype)initWithCoder:(NSCoder *)coder。推荐直接代码写frame。

因为cell已经被旋转,所以直接正常的frame的布局就可以了。

代码:https://coding.net/u/ysk/p/HorizontalTableView/git

就写到这吧,有什么不妥或者感觉我写的有什么不对的地方,欢迎指正啊。

iOS有关横向TableView的东西的更多相关文章

  1. iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换

    iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换 不多说直接上效果图和代码 1.设置RootViewController为一个导航试图控制器 //  Copyright © 2016年 ...

  2. IOS详解TableView——选项抽屉(天猫商品列表)

    在之前的有篇文章讲述了利用HeaderView来写类似QQ好友列表的表视图. 这里写的天猫抽屉其实也可以用该方法实现,具体到细节每个人也有所不同.这里采用的是点击cell对cell进行运动处理以展开“ ...

  3. iOS 两个tableview的 瀑布流

    iOS 两个tableview的 瀑布流1. [代码]Objective-C     ////  DocViewController.m//  getrightbutton////  Created ...

  4. IOS要用到的东西

    code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例 cocoacontrols.com/ 英文版本的lib收集 objclibs.com/ 精品lib的收集网站 h ...

  5. 关于iOS开发常用的一些东西

    备注:这里只是个人的观点,有的地方也是copy,多多指教,个人笔记,有侵犯你们版权的地方还望海涵!!! 1. 自定义键盘:inputView重写,可以用重写UITextField来实现 2. UIDa ...

  6. ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用

    做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...

  7. jquery mobile上传图片完整例子(包含ios图片横向问题处理和C#后台图片压缩)

    上传图片本身是个基本的小功能,但是到了移动端就不那么简单了,相信找到这篇文章的你一定有深深的同感. 本文实例是:在(移动端)页面中点击图片,然后选择文件,然后保存.使用Asp.net 难点一:后台获取 ...

  8. iOS UIKit:TableView之编辑模式(3)

    一般table view有编辑模式和正常模式,当table view进入编辑模式时,会在row的左边显示编辑和重排控件,如图 42所示的编辑模式时的控件布局:左边的editing control有表 ...

  9. iOS UIKit:TableView之单元格配置(2)

    Table View是UITableView类的实例对象,其是使用节(section)来描述信息的一种滚动列表.但与普通的表格不同,tableView只有一行,且只能在垂直方向进行滚动.tableVi ...

随机推荐

  1. node服务的监控预警系统架构

    需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...

  2. 从Membership 到 .NET4.5 之 ASP.NET Identity

    我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计.正所谓从实践从来,到实践从去,在我们把Membership的结构吃透之后,我们要 ...

  3. runtime梳理。

    一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数. 对于OC的函数,属于 ...

  4. c#多线程

    一.使用线程的理由 1.可以使用线程将代码同其他代码隔离,提高应用程序的可靠性. 2.可以使用线程来简化编码. 3.可以使用线程来实现并发执行. 二.基本知识 1.进程与线程:进程作为操作系统执行程序 ...

  5. Http请求

    HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 请求报文 一个HTTP请求报文由请求行(request line ...

  6. 简单酷炫的canvas动画

    作为一个新人怀着激动而紧张的心情写了第一篇帖子还请大家多多支持,小弟在次拜谢. 驯鹿拉圣诞老人动画效果图如下 html如下: <div style="width:400px;heigh ...

  7. 【SAP业务模式】之ICS(四):组织单元的配置

    SAP的ICS业务后台配置主要有以下几个配置点: 1.组织单元的配置(公司代码.销售组织.工厂.采购组织等): 2.主数据的部分: 3.订单和开票的定价过程: 4.开票输出类型: 5.公司间发票的配置 ...

  8. AndroidStudio — Error:Failed to resolve: junit:junit:4.12错误解决

    原博客:http://blog.csdn.net/u013443865/article/details/50243193 最近使用AndroidStudio出现以下问题: 解决:打开app下的buil ...

  9. Android 调用百度地图API

    一.到 百度地图开发平台下载SDK http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download 1.点击自定义下载 2.下 ...

  10. jquery.multiselect 多选下拉框实现

    第一步:链接下列文件,如果没有,到此网页下载 https://github.com/ehynds/jquery-ui-multiselect-widget,此插件基于jquery ,所以jquery的 ...