布局推荐界面

实现效果

  • 今天内容完成效果

推荐界面分析

  • 上层有无限轮播器(之后再完成)
  • 滚动的UIScrollView或者UICollectionView(之后再完成)
  • 下面是UICollectionView,并且有HeaderView
    • UICollectionView的Cell大小基本一致,但是在颜值处Cell的高度有变化。
    • 该UICollectionView一共12组,第一组8个Item,其他组均4个Item

布局UICollectionView

  • 在控制器的View中添加UICollectionView

    • 懒加载UICollectionView
    • 将UICollectionView添加到控制器的View中
  • 特殊属性设置:
    • headerReferenceSize : 设置头部的Size
    • sectionInset :设置每组的内边距
       
  1. private let kItemMargin : CGFloat = 10
  2. private let kItemW : CGFloat = (kScreenW - 3 * kItemMargin) / 2
  3. private let kNormalItemH : CGFloat = kItemW * 3 / 4
  4. private let kPrettyItemH : CGFloat = kItemW * 4 / 3
  5. private let kHeaderViewH : CGFloat = 50
  6. // MARK:- 懒加载属性
  7. private lazy var collectionView : UICollectionView = {[unowned self] in
  8. // 1.创建布局
  9. let layout = UICollectionViewFlowLayout()
  10. layout.itemSize = CGSize(width: kItemW, height: kNormalItemH)
  11. layout.minimumLineSpacing = 0
  12. layout.minimumInteritemSpacing = kItemMargin
  13. layout.headerReferenceSize = CGSize(width: kScreenW, height: kHeaderViewH)
  14. layout.sectionInset = UIEdgeInsets(top: 0, left: kItemMargin, bottom: 0, right: kItemMargin)
  15. // 2.创建UICollectionView
  16. let collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: layout)
  17. collectionView.dataSource = self
  18. collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: kNormalCellID)
  19. return collectionView
  20. }()
  • 实现UICollectionView的数据源方法
       
  1. // MARK:- 遵守UICollectionView的数据源协议
  2. extension RecommendViewController : UICollectionViewDataSource {
  3. func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
  4. return 12
  5. }
  6. func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  7. if section == 0 {
  8. return 8
  9. }
  10. return 4
  11. }
  12. func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
  13. let cell = collectionView.dequeueReusableCellWithReuseIdentifier(kNormalCellID, forIndexPath: indexPath)
  14. cell.backgroundColor = UIColor.redColor()
  15. return cell
  16. }
  17. }
  • 展示效果如下:

布局UICollectionView的headerView

  • 实现效果
  • 实现思路
    • 自定义UICollectionReusableView, 用于作为HeaderView
    • 可以通过Xib直接描述
    • 在注册Cell时,使用Nib进行注册
  • 代码如下:
       
  1. collectionView.registerNib(UINib(nibName: "RecommendHeaderView", bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: kHeaderViewID)
  • 效果如下:

布局普通的UICollectionViewCell

  • 实现效果
  • 实现思路
    • 自定义UICollectionViewCell,用于作为普通的Cell
    • 可以通过Xib直接描述
    • 在注册Cell时,使用Nib进行注册
  • 代码如下:
       
  1. collectionView.registerNib(UINib(nibName: "CollectionNormalCell", bundle: nil), forCellWithReuseIdentifier: kNormalCellID)
  • 效果如下:

布局颜色的UICollectionViewCell

  • 实现效果
  • 实现思路
    • 自定义UICollectionViewCell,用于作为颜值的Cell
    • 可以通过Xib直接描述
    • 在注册Cell时,同时注册颜值的Cell
  • 代码如下
       
  1. collectionView.registerNib(UINib(nibName: "CollectionPrettyCell", bundle: nil), forCellWithReuseIdentifier: kPrettyCellID)
  • 在获取Cell时,进行判断

    • 抽取父类,方便管理
       
  1. func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
  2. let cell : CollectionBaseCell!
  3. if indexPath.section == 1 {
  4. cell = collectionView.dequeueReusableCellWithReuseIdentifier(kPrettyCellID, forIndexPath: indexPath) as! CollectionBaseCell
  5. } else {
  6. cell = collectionView.dequeueReusableCellWithReuseIdentifier(kNormalCellID, forIndexPath: indexPath) as! CollectionBaseCell
  7. }
  8. return cell
  9. }
  • 另外,因为NormalCell&PrettyCell高度不同, 因此需要设置代理,并且实现代理方法
       
  1. func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
  2. if indexPath.section == 1 {
  3. return CGSize(width: kItemW, height: kPrettyItemH)
  4. } else {
  5. return CGSize(width: kItemW, height: kNormalItemH)
  6. }
  7. }
  • 效果如下:

来源:http://bbs.520it.com/forum.php?mod=viewthread&tid=2280

小码哥-玩转【斗鱼直播APP】系列之布局推荐界面相关推荐

  1. 小码哥-玩转【斗鱼直播APP】系列之项目部署

    项目部署目的 任何一个项目最好使用源代码管理工具 源代码管理工具可以帮助我们解决备份.版本回退等等问题 因为是非基础篇,因此具体好处不在累述 常见的源代码管理工具: SVN: 集中式源代码管理工具 G ...

  2. 小码哥-玩转【斗鱼直播APP】系列之获取APP图片资源

    重要提醒 原作者的代码有少许问题, 可能会崩溃 我已经在我fork的代码中修复了问题. 请大家去我的Github上下载该工具. 如果对你有帮助, 可以star一下哈. Github地址: coderw ...

  3. 小码哥-玩转【斗鱼直播APP】系列之利用青花瓷抓取数据

    利用青花瓷抓取数据 青花瓷是什么? 当然这里可不是周董的歌曲, 而是我们用于抓取接口的工具. 安装一下这个软件 百度搜索该工具会找到很多绿色版(破解版的文艺说法). 安装即可, 不再累述. 手机端配置 ...

  4. 小码哥-玩转【斗鱼直播APP】系列之首页导航栏设置

    首页导航栏设置 重点掌握内容 导航栏添加Items 给系统的类扩充方法 扩充便利构造函数 效果展示 在iOS开发中,导航栏的设置是必不可少的一部分. 通常导航栏中会放很多的UIBarButtonIte ...

  5. 小码哥-玩转【斗鱼直播APP】系列之实现无限轮播

    实现无限轮播 生活杂谈 最近很多童鞋私信我,Swift项目有些语法跟不上.希望我出OC版的(OC版我会在后续推出),但是以我的考虑来说,Swift在语言排行版上面其实已经超过OC,另外国内现在新项目一 ...

  6. 小码哥-玩转【斗鱼直播APP】系列之框架搭建

    搭建效果展示 框架搭建分析 首先最底部是一个UITabbar,因此我们可以用一个UITabBarController作为启动控制器 分别添加子控制器HomeVc.LiveVc.FollowVc.Pro ...

  7. 小码哥-玩转【斗鱼直播APP】系列之首页布局分析实现

    本帖最后由 王红元老师 于 2016-9-14 21:25 编辑 布局首页分析实现 完成最终效果 这个效果还是挺常见的哈 效果分析: 顶部是一个工具类,并且为了该工具类可以复用.(其他界面也用到)最好 ...

  8. 小码哥-玩转【斗鱼直播APP】系列之项目基本设置

    设置的内容 任何一个项目在新建之后都有很多东西需要进行设置. 比如版本号.BundleID.部署版本等等 设置BundleID.部署版本.横竖屏等 设置图标.启动图片 设置项目名称 Info.plis ...

  9. 小码哥-玩转【斗鱼直播APP】系列之游戏推荐展示

    游戏推荐展示 展示效果 展示效果 思路分析 其实这个实现比较简单,也是有两种方案 UIScrollView:直接在上面放上UIButton即可 UICollectionView:每一个游戏用一个Cel ...

最新文章

  1. ​中国开启开源新纪元
  2. H3CNE考试讨论群
  3. 10.3 广州集训 Day2
  4. VMware linux 在2.4.20-8 中编译2.6.15.5 内核
  5. [AtCoder Educational DP Contest] J - Sushi(期望dp)
  6. java rhino_在Java 8中使用Rhino
  7. 未定义与 struct 类型的输入参数相对应的函数 fetch_引入鲁棒性作为连续参数,这种新损失函数实现了自适应、随时变换...
  8. 移动端UC /QQ 浏览器的部分私有Meta 属性
  9. 前端学习(1534):服务器和客户端传输
  10. java 内部编码_Java 中文编码分析
  11. Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
  12. 北斗卫星导航系统基础篇之(三)——北斗缩略词详解
  13. RGB888转换为RGB565格式
  14. matlab设计译码器,基于Matlab编译码器的仿真与设计
  15. Java实验——分别统计字符串中出现的大写字母、小写字母个数,以及出现的数字字符以及其他字符的个数
  16. 微信跳一跳辅助之JAVA版(最容易理解的算法)实现原理分析
  17. s/μs/ns/ps与Hz/KHz/MHz/GHz换算关系
  18. 关于Windows PowerShell
  19. 如何查询idea当前项目所有打断点的位置
  20. 使用frp配置内网穿透

热门文章

  1. layui的简单使用
  2. 微信扫码支付之大额支付失败问题
  3. dell服务器第二次维修,DELL 系列服务器报错及解决办法
  4. python走后端路线_python后端学习路线
  5. 北京工业大学c语言网上作业,北京工业大学C语言部分练习答案.docx
  6. OpenCV3.1.0+VS2013配置+Win10(64位)(转载)
  7. React Native真机运行apk安装失败: com.android.ddmlib.InstallException: INSTALL_FAILED_USER_RESTRICTED
  8. 开源项目-esp32—S3+lvgl智能手表
  9. 【DFT】可测性设计(三)边界扫描测试
  10. mac终端报错 ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)