Swift - 使用网格(UICollectionView)进行流布局
(本文代码已升级至Swift4)
--- ViewController.swift ---
源码下载:hangge_ CollectionView.zip
一、网格UICollectionView最典型的例子是iBooks。其主要属性如下:
1,layout
该属性表示布局方式,有Flow、Custom两种布局方式。默认是Flow流式布局。
2,Accessories
是否显示页眉和页脚
3,各种尺寸属性
Cell Size:单元格尺寸
Header Size:页眉尺寸
Footer Size:页脚尺寸
Min Spacing:单元格之间间距
Section Insets:格分区上下左右空白区域大小。
二、流布局的简单样例
1,先创建一个应用Simple View Application,在 StoryBoard 中删除默认的 View Controller,拖入一个 Collection View Controller 到界面上,这时我们可以看到已经同时添加了 Collection View 和 Collection View Cell 控件。
2,勾选 Collection View Controller 属性面板里的 Is Initial View Controller 复选框,设置为启动视图控制器。
3,在 Collection View Cell里拖入一个Image View和Label并摆放好位置和大小,用于显示图标和名称。
4,设置Image View的tag为1,Label的tag为2,Colletion View Cell的Identifier为DesignViewCell。
5,最后,将 Collection View Controller 的 Custom Class 设置成 ViewController(ViewController.swift 里面代码可以先改,具体见下方)
效果图如下:
import UIKit class ViewController: UICollectionViewController { //课程名称和图片,每一门课程用字典来表示 let courses = [ ["name":"Swift","pic":"swift.png"], ["name":"OC","pic":"oc.jpg"], ["name":"java","pic":"java.png"], ["name":"php","pic":"php.jpeg"] ] override func viewDidLoad() { super.viewDidLoad() // 已经在界面上设计了Cell并定义了identity,不需要注册CollectionViewCell //self.collectionView.registerClass(UICollectionViewCell.self, // forCellWithReuseIdentifier: "DesignViewCell") self.collectionView?.backgroundColor = UIColor.white } // CollectionView行数 override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return courses.count; } // 获取单元格 override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { // storyboard里设计的单元格 let identify:String = "DesignViewCell" // 获取设计的单元格,不需要再动态添加界面元素 let cell = (self.collectionView?.dequeueReusableCell( withReuseIdentifier: identify, for: indexPath))! as UICollectionViewCell // 从界面查找到控件元素并设置属性 (cell.contentView.viewWithTag(1) as! UIImageView).image = UIImage(named: courses[indexPath.item]["pic"]!) (cell.contentView.viewWithTag(2) as! UILabel).text = courses[indexPath.item]["name"] return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
源码下载:hangge_ CollectionView.zip
按照示例,不显示图片和内容。
航哥,怎么不用代码写,都用xib拖呢
override 报错,删掉override就不会运行这些代码,结果不论怎么一个字的代码都运行不了
怎么弄出来只有背景颜色显示出来了,一个单元格也没有
collectionView设置成水平scroll时,怎么只显示一行呢?
放上源文件岂不妙哉
为什么有的时候要问号,有的时候要感叹号呢?什么情况下用?,什么情况下用!。可以解释一下吗?
我按照您的步骤,结果怎么出来是黑屏呢?
航哥我想请问下,这里要怎么设置网络上的图片链接?
// 从界面查找到控件元素并设置属性
(cell.contentView.viewWithTag(1) as! UIImageView).image =
UIImage(named: courses[indexPath.item]["pic"]!)
let identify = "menu_cell"
let cell = menusCollection.dequeueReusableCellWithReuseIdentifier(identify, forIndexPath: indexPath) as UICollectionViewCell
(cell.contentView.viewWithTag(10001) as! UIImageView).image = UIImage(named: "menu_2")
好像没有通过tag取到图片对象
您好,为什么我的self没有成员变量 collectionView,想从storyboard中用outlet连接也连接不了呢
你不注册能出来 醉了