tableViewCell里嵌套collectionView

UITableViewCell里面嵌套UICollectionView出现tableviewcell被遮挡的bug 项目中要实现UITableViewCell里面嵌套UICollectionView, 通过监听UICollectionView的contentSize 改变UITableViewCell的高度. 使用过程中出现UITableViewCell被遮挡显示不全下个分区商品区头题目遮挡上一个商品.,在把cell滑出屏幕后显示正常的bug问题 阅读详情
有时要实现一个复杂的页面布局,单单使用  UITableView 实现不了,需要通过  UITableView 和  UICollectionView 结合实现,即每个单元格  tableViewCell 中都嵌套一个  collectionView。下面通过样例演示如何实现。


1,效果图

(1)表格中每一个单元格对应一个月份的图书列表。
(2)单元格中头部显示月份标题。内部通过  collectionView 显示当月所有书籍封面图片,数量不定。整个单元格高度自适应。
(3)这个样例其实只用多  section 的  collectionView 也能实现( 点击查看)。本文使用  UITableView +  UICollectionView 演示如何实现同样的功能,
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

2,如何实现单元格高度自适应

(1)我们要对  collectionView 设置个高度约束。当在单元格中更新  collectionView 的数据时,要获取这个  collectionView 的真实的内容高度( contentSize.height),然后用  contentSize.height 来更新  collectionView 的高度约束。这样就实现了单元格内部  collectionView 的高度自适应。
(2)而对于单元格  tableViewCell 的高度自适应,是通过  AutoLayout 特性实现的。利用内容将  cell 撑起来。
1
2
3
4
//设置estimatedRowHeight属性默认值
self .tableView!.estimatedRowHeight = 44.0
//rowHeight属性设置为UITableViewAutomaticDimension
self .tableView!.rowHeight =  UITableViewAutomaticDimension

3,实现步骤

(1)新建一个自定义的  collectionView 单元格类: MyCollectionViewCell,同时勾选“ Also create XIB file”
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

(2)在  MyCollectionViewCell.xib 中添加一个  ImageView,并设置好约束。同时在对应的类中作关联
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

(3) MyCollectionViewCell.swift 代码如下:
1
2
3
4
5
6
7
8
9
10
11
import  UIKit
 
class  MyCollectionViewCell :  UICollectionViewCell  {
 
     //用于显示封面缩略图
     @IBOutlet  weak  var  imageView:  UIImageView !
     
     override  func  awakeFromNib() {
         super .awakeFromNib()
     }
}

(4)新建一个自定义的  tableView  单元格类: MyTableViewCell ,同时勾选“ Also create XIB file ”
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

(5)在  MyTableViewCell.xib 中添加一个  Label 和一个  CollectionView,并设置好约束。同时在对应的类中作关联。
其中  Label 设置的是上、下、左、右4个约束:
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

CollectionView 设置的是左、右、下以及高度这个4个约束:
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

同时调整下  CollectionView 的  Cell Size 和  Min Spacing:
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

(6) MyTableViewCell.swift 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import  UIKit
 
class  MyTableViewCell :  UITableViewCell ,  UICollectionViewDelegate ,  UICollectionViewDataSource
{
     
     //单元格标题
     @IBOutlet  weak  var  titleLabel:  UILabel !
     
     //封面图片集合列表
     @IBOutlet  weak  var  collectionView:  UICollectionView !
     
     //collectionView的高度约束
     @IBOutlet  weak  var  collectionViewHeight:  NSLayoutConstraint !
     
     //封面数据
     var  images:[ String ] = []
     
     override  func  awakeFromNib() {
         super .awakeFromNib()
         
         //设置collectionView的代理
         self .collectionView.delegate =  self
         self .collectionView.dataSource =  self
         
         // 注册CollectionViewCell
         self .collectionView!.register( UINib (nibName: "MyCollectionViewCell" , bundle: nil ),
                                       forCellWithReuseIdentifier:  "myCell" )
     }
     
     //加载数据
     func  reloadData(title: String , images:[ String ]) {
         //设置标题
         self .titleLabel.text = title
         //保存图片数据
         self .images = images
         
         //collectionView重新加载数据
         self .collectionView.reloadData()
         
         //更新collectionView的高度约束
         let  contentSize =  self .collectionView.collectionViewLayout.collectionViewContentSize
         collectionViewHeight.constant = contentSize.height
         
         self .collectionView.collectionViewLayout.invalidateLayout()
     }
     
     //返回collectionView的单元格数量
     func  collectionView(_ collectionView:  UICollectionView ,
                         numberOfItemsInSection section:  Int ) ->  Int  {
         return  images.count
     }
     
     //返回对应的单元格
     func  collectionView(_ collectionView:  UICollectionView ,
                         cellForItemAt indexPath:  IndexPath ) ->  UICollectionViewCell  {
         let  cell  = collectionView.dequeueReusableCell(withReuseIdentifier:  "myCell" ,
                                                 for : indexPath)  as !  MyCollectionViewCell
         cell.imageView.image =  UIImage (named: images[indexPath.item])
         return  cell
     }
     
     //绘制单元格底部横线
     override  func  draw(_ rect:  CGRect ) {
         //线宽
         let  lineWidth = 1 /  UIScreen .main.scale
         //线偏移量
         let  lineAdjustOffset = 1 /  UIScreen .main.scale / 2
         //线条颜色
         let  lineColor =  UIColor (red: 0xe0/255, green: 0xe0/255, blue: 0xe0/255, alpha: 1)
         
         //获取绘图上下文
         guard  let  context =  UIGraphicsGetCurrentContext ()  else  {
             return
         }
         
         //创建一个矩形,它的所有边都内缩固定的偏移量
         let  drawingRect =  self .bounds.insetBy(dx: lineAdjustOffset, dy: lineAdjustOffset)
         
         //创建并设置路径
         let  path =  CGMutablePath ()
         path.move(to:  CGPoint (x: drawingRect.minX, y: drawingRect.maxY))
         path.addLine(to:  CGPoint (x: drawingRect.maxX, y: drawingRect.maxY))
         
         //添加路径到图形上下文
         context.addPath(path)
         
         //设置笔触颜色
         context.setStrokeColor(lineColor.cgColor)
         //设置笔触宽度
         context.setLineWidth(lineWidth)
         
         //绘制路径
         context.strokePath()
     }
     
     override  func  setSelected(_ selected:  Bool , animated:  Bool ) {
         super .setSelected(selected, animated: animated)
     }
}

(7)在  StoryBoard 主视图中添加一个  TableView,并设置好约束。同时在对应的类中作关联。
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

(8) ViewController.swift 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import  UIKit
 
//每月书籍
struct  BookPreview  {
     var  title: String
     var  images:[ String ]
}
 
class  ViewController :  UIViewController ,  UITableViewDelegate ,  UITableViewDataSource  {
     
     //所有书籍数据
     let  books = [
         BookPreview (title:  "五月新书" , images: [ "0.jpg" ,  "1.jpg" , "2.jpg" ,  "3.jpg" ,
                                                     "4.jpg" , "5.jpg" , "6.jpg" ]),
         BookPreview (title:  "六月新书" , images: [ "7.jpg" ,  "8.jpg" ,  "9.jpg" ]),
         BookPreview (title:  "七月新书" , images: [ "10.jpg" ,  "11.jpg" ,  "12.jpg" ,  "13.jpg" ])
     ]
     
     //显示内容的tableView
     @IBOutlet  weak  var  tableView:  UITableView !
     
     override  func  loadView() {
         super .loadView()
     }
     
     override  func  viewDidLoad() {
         super .viewDidLoad()
         
         //设置tableView代理
         self .tableView!.delegate =  self
         self .tableView!.dataSource =  self
         
         //去除单元格分隔线
         self .tableView!.separatorStyle = .none
         
         //创建一个重用的单元格
         self .tableView!.register( UINib (nibName: "MyTableViewCell" , bundle: nil ),
                                  forCellReuseIdentifier: "myCell" )
         
         //设置estimatedRowHeight属性默认值
         self .tableView!.estimatedRowHeight = 44.0
         //rowHeight属性设置为UITableViewAutomaticDimension
         self .tableView!.rowHeight =  UITableViewAutomaticDimension
     }
     
     //在本例中,只有一个分区
     func  numberOfSectionsInTableView(tableView:  UITableView ) ->  Int  {
         return  1;
     }
     
     //返回表格行数
     func  tableView(_ tableView:  UITableView , numberOfRowsInSection section:  Int ) ->  Int  {
         return  self .books.count
     }
     
     
     //创建各单元显示内容(创建参数indexPath指定的单元)
     func  tableView(_ tableView:  UITableView , cellForRowAt indexPath:  IndexPath )
         ->  UITableViewCell  {
         let  cell = tableView.dequeueReusableCell(withIdentifier:  "myCell" )
             as !  MyTableViewCell
         
         //下面这两个语句一定要添加,否则第一屏显示的collection view尺寸,以及里面的单元格位置会不正确
         cell.frame = tableView.bounds
         cell.layoutIfNeeded()
         
         //重新加载单元格数据
         cell.reloadData(title:books[indexPath.row].title,
                         images: books[indexPath.row].images)
         return  cell
     }
     
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
}
源码下载: hangge_1591.zip

功能修改:每个单元格只显示一行封面图片

上面的样例中,每个单元格内的图片是全部显示出来,有多少显示多少,高度自适应。
我们还可以换种展示方法,每个单元格,即每个  collectionView 只显示一行数据,图片如果多的话可以通过左右滑动查看。

1,效果图

    原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)       原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

2,实现原理

我们只需要把  collectionView 的滚动方向改成水平方向即可。
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

如果不需要显示横向的滚动条,可以去掉“ Shows Horizontal Indicator”的勾选。
原文:Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

原文链接: http://www.hangge.com/blog/cache/detail_1591.html
UITableViewCell中添加横向滚动视图,用于展示不同图片。利用UICollectionView的优点,从而性能上有很大优化 https://github.com/amber01/WSHorizontalListView.git UITableViewCell中添加横向滚动视图,用于展示不同图片。利用UICollectionView的优点,从而性能上有很大优化 立即下载

相关推荐

Swift实现TableView嵌套CollectionView

源码DHCollectionTableView,源码是一个Swift实现TableView嵌套CollectionView,主要采用Swift实现UITableView内嵌套UICollectionView的效果如下: 测试环境:Xcode 6.0,iOS 7.0以上

Swift - 实现表格tableViewCell里嵌套collectionView(附样例)

有时要实现一个复杂的页面布局,单单使用 UITableView 实现不了,需要通过 UITableView 和 UICollectionView 结合实现,即每个单元格 tableViewCell 中都嵌套一个 collectionView。下面通过样例演示如何实现。 1,效果图 (1)表格中每一个单元格对应一个月份的图书列表。 (2)单元格中头部显示月份标题。内部通过 collec

mo_xiao_mo的博客 5417

UicollectionView嵌套tableview

代码简洁明了

UITableViewCell嵌套UICollectionView,Cell自适应高度问题

UITableViewCell嵌套UICollectionView,Cell自适应高度问题 有一个需求要求UITableViewCell中嵌套一个UICollectionView,然后cell的高度需要自动适应,在这个问题纠结了好久,网上找了许多资料,但是最终结果不如任意。 最终找到一种方法,试用之后效果完美。 网上许多人都说这两种方法是可以自动适应高度的(图片网上找,自己懒得截图): 但是经过我测试之后,发现上面的两种方法, 不管我是使用masory和XIB布局 ,结果发现都是不可以的, 第一次进去

yong_19930826的博客 4054

AR Tag 与 ROS:从基础部署到机器人视觉定位实战

本文详细介绍了AR Tag技术在ROS环境下的部署与应用,涵盖从基础原理到机器人视觉定位的实战技巧。通过分析AR Tag的特征提取、位姿解算等核心技术,结合ROS工具包`ar_track_alvar`的配置优化,帮助开发者实现高精度的视觉定位系统。文章还分享了深度相机配置、坐标转换及性能优化等实用经验,适用于仓储机器人、物流分拣等场景。

weixin_33146151的博客 180

Python+Seaborn可视化:双因素方差分析结果这样呈现更专业

本文详细介绍了如何利用Python中的Seaborn和statsmodels库,专业地执行并可视化双因素方差分析结果。通过模拟实验数据,演示了从模型构建、统计检验(包括交互作用分析)到诊断验证的全流程。重点展示了如何使用Seaborn绘制交互效应图、组合分布图及热图,将复杂的统计结果转化为直观、富有洞察力的可视化图表,助力科研论文与商业报告的专业呈现。

weixin_29274969的博客 137

iOS 自动布局下UITableViewCell嵌套CollectionView

开发过程中我们经常会遇到稍微复杂的视图需要tableView和collectionView的相互嵌套,那么当cell嵌套tableView或者collectionView的时候怎么让cell自动布局撑起来呢,这里以cell嵌套collectionView为例: 方案1: 使用collectionViewLayout.collectionViewContentSize来获取collectionVi...

weixin_33810302的博客 4361

CentOS 7 常用命令大全

CentOS中Linux命令

m0_63075763的博客 2018

tableViewCell上collectionView空白部分点击事件穿透到 tablveiwcell上

第一种实现方法:给collectionView加手势,会出现与collectionview 的collectionCell didselect 事件冲突 解决办法:在tablveiwCell 中写出下代码 UITapGestureRecognizer *collectionvViewGesture = [[UITapGestureRecognizer alloc]initWithTar

feifeiwuxian的专栏 5729

多模态数据集对比:MicroLens、PixelRec和Amazon在电商推荐中的表现差异

本文深入对比了三大主流多模态数据集MicroLens、PixelRec和Amazon在电商推荐中的表现差异。通过实际测试数据,分析了这些数据集在冷启动处理、模态融合、稀疏性挑战等关键场景下的真实表现,为算法工程师和研究员提供实用指南。特别关注多模态数据集的选择对推荐系统效果的影响,帮助开发者优化模型性能。

weixin_28717939的博客 418

保姆级教程:STM32CubeMX配置PWM死区与刹车功能,防止电机驱动炸管

本文详细解析了使用STM32CubeMX配置PWM死区与刹车功能的完整流程,帮助工程师避免电机驱动中的炸管风险。通过深入讲解死区时间计算公式、CubeMX配置界面及刹车功能的安全机制,结合实际电路设计要点和调试技巧,为电机驱动和电源转换应用提供可靠解决方案。

weixin_42550597的博客 346

tableViewCell嵌套collectionView,执行reloadData时跳动问题记录

如上图,热销下的多方格为tableViewCell中嵌套的collectionView,在添加商品成功并刷新tableView时,发生不规则跳动问题。 问题原因: tableView中的所有Cell均采取自适应高度(UITableView.automaticDimension),且estimatedRowHeight未给予合理的高度。每当重新刷新table时,由于没有合适的预高度,从刷新t...

mscinsidious的博客 2768

告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)

本文详细介绍了如何使用SUMO的netedit工具高效构建高速公路交织区路网,避免手动绘图的低效与错误。通过实战案例和XML文件示例,帮助交通工程专业学生快速掌握复杂道路结构建模技巧,特别解析了spreadType参数设置和速度单位换算等关键操作。

weixin_29085865的博客 259

iOS tableview嵌套collectionview

还是项目需求,需要在一个列表实现多个图片滑动的效果,所以就用了tableview嵌套collectionview来实现,废话不多说,直接上代码 这是tableView的创建,collectionview直接写在了自定义的tableviewCell里 #pragma make --tableView代理方法 -(NSInteger)tableView:(UITableView *)tableView...

weixin_33915554的博客 807

【深度学习】什么是自回归模型?

自回归模型是一种重要的时间序列模型,通过利用过去的值来预测当前或未来的值。它在统计学、经济学、自然语言处理等领域有广泛的应用。自回归模型的简单性和可解释性使其成为许多应用的首选,但在更复杂的情况下,可能需要结合其他模型如移动平均模型(MA模型)或混合模型(如ARIMA)来更好地捕捉时间序列中的模式。扩散模型(Diffusion Model)和自回归模型(Autoregressive Model)是两种不同的生成模型,各自有独特的特点和应用场景。

q742971636的博客 1670

Android 13 RK3588 编译烧写实录全程

本文详细记录了RK3588主板在Android 13系统下的各项功能测试与编译过程。主要内容包括:1)网络功能测试(以太网、WiFi、蓝牙连接);2)外设接口测试(耳机、麦克风、USB、TF卡);3)硬件功能验证(RTC时钟、ADC采样、MIPI摄像头);4)系统设置(手势导航、开发者选项);5)Android 13 SDK编译环境搭建与源码获取方法。通过图文并茂的方式展示了各功能的配置方法、操作步骤和测试结果,为开发者提供了全面的参考指南。

hnjzfwy的博客 238

TabelView嵌套CollectionView高度适应

由于业务需求,有时候普通的TabelView或者CollectionView已经无法满足我们的日常开发样式,所有常常需要在TabelView中嵌套CollecitonView. 我的一般做法就是在TabelViewCell中添加CollectionView。如果collectionView的排班方向与tabelVeiw一致,就会遇到一个问题。 如何确定TabelViewCell的高度。 一、...

小桥流水哗啦啦,iOS Coder 哒哒哒 1699

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

tabelVew嵌套CollectionView

重要的写在前面,写了一个tabelVew嵌套CollectionView的使用方法,相关的demo请点击demo链接 简单的说,就是每一个tabelVewCell里面都包含一个CollectionView.其实思路很简单的: 1.创建一个tableVIew加入数据源,加入tableView如果需要加入一个头视图,加入代理方法-(UITableView *)tableView{if (!_tabl

Baron的博客 1602

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

tableviewcell嵌套collectionview

http://www.cnblogs.com/qiuwenbin/p/5046691.html

克莱斯勒的博客 2110

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

tableView嵌套collectionView

首先是自定义collectionView填充的tableViewCell import UIKit // 定义一个collectionView,重写初始化大小和布局方法 class TrendsDetailZanCollectionView: UICollectionView { var indexPath: NSIndexPath! o...

weixin_30287169的博客 141

tableViewCell嵌套collectionView,动态高度

方法有很多,有通过内容高度,经过代理回调,刷新的,甚至还有计算cell个数,然后根据cell大小计算的,这里推荐iOS 8新特性,通过AutoLayout,利用内容将cell撑起来; 关键代码: viewcontroller中: self.tableview.estimatedRowHeight = 40; self.tableview.rowHeight = UITableViewAut...

weixin_30497527的博客 1757

tableViewCell中嵌套collectionViewCell 显示异常

现象:微博客户端,如果微博内容包含图片,图片偶尔显示偶尔空白,还会出现混乱的现象 异常1:图片混乱 分析:因为tableViewCell使用复用机制,所以tableViewCell中的collectionView也被复用了,所以不会再调用collectionView的代理方法,所以图片沿用之前复用的图片,出现混乱现象。 解决方法:在加载collectionView之前,删除col

woshiluahuo的博客 3433

iOS tableViewCell嵌套UICollectionView 自适应高度

iOS tableViewCell嵌套UICollectionView 自适应高度 在对UICollectionView reload 后item的个数变化导致collectionViewContentSize发生变化。导致tableViewCell的高度不正确。 解决办法 重写systemLayoutSizeFitting方法 override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority

meiyulong518的博客 2345

TableViewCell 里面嵌的TableViewCell 如何点击里面的TableViewCell进行页面跳转?

下面是里面TableView的代码 #import "ClassViewCell.h" #import "MyCollectionCell.h" #import "StringManager.h" #import "HomeViewController.h" #import "FreeWorkList.h" @implementation ClassViewCell  #define SCR

louzirou0925的博客 885

iOS多重嵌套页面

先上作品图 UI样式设计非原创,仅用于学习。 主要的功能点 头部视图会跟随移动,选择介绍和攻略页的segmentController又会一直保留在最顶部 点击segmentController切换相应页面,滑动页面变更segmentController的index显示 tableViewCell中嵌套UICollectionView tableViewCell中的实现类似朋友圈“全文”和“收起...

weixin_33893473的博客 924
上一篇: 颜色转换
下一篇: 多section分区的collectionView
FlyingFireFish
博客等级 码龄9年 23粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值