由於這次的開發是使用Programmatic UI(使用代碼打造畫面),所以在元件的複用上非常方便,只要將代碼複製貼上並且稍作修改就好,這就是Programmatic UI的好處,與StoryBoard相比,StoryBoard在設定上更為直覺,有著非常方便的屬性檢閱器可以使用,並且會立即渲染,對於新手非常友善,但是有一些動態設定,就需要用到代碼來編輯元件,我覺得各有好壞,像是StoryBoard在元件複用上就比較差。
每個工程師都有自己偏好的技巧以及工具,端看工程師如何選擇,能夠把專案完成得漂亮就好。
與上一篇的模式一樣,首先一樣先宣告一個UICollectionView
:
var secondCollectionView: UICollectionView!
宣告完了之後,使用一個func
來包裝這些設定,然後針對secondCollectionView
進行設置。
func setupSecondCollectionView()
{
let viewFrame = UIScreen.main.bounds
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
self.secondCollectionView = UICollectionView(frame: CGRect(
x: 0,
y: (viewFrame.height * 0.55),
width: viewFrame.width ,
height: (viewFrame.height * 0.4)),
collectionViewLayout: layout)
layout.itemSize = CGSize(width: viewFrame.width * 0.75,
height: secondCollectionView.frame.height * 0.9)
layout.minimumLineSpacing = CGFloat(integerLiteral: Int(viewFrame.width * 0.05))
layout.minimumInteritemSpacing = CGFloat(integerLiteral: 100)
layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 20, right: 10)
layout.scrollDirection = UICollectionView.ScrollDirection.horizontal
self.secondCollectionView.dataSource = self
self.secondCollectionView.delegate = self
self.secondCollectionView.register(CardCell.self, forCellWithReuseIdentifier: CollectionViewCellIdentifier.secondCell.identifier)
self.secondCollectionView.backgroundColor = UIColor(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 1)
self.view.addSubview(secondCollectionView)
}
設置完之後,需要找個地方呼叫這個方法,這樣才能夠完成對於UICollectionView的設定,我一樣在viewDidLoad
呼叫,所以現在的viewDidLoad應該有兩個設定UICollectionView的方法,並且生命週期內部應該長這樣子:
override func viewDidLoad() {
super.viewDidLoad()
setupFirstCollectionView()
setupSecondCollectionView()
}
另外再在CardCell
類別內設定Cell
的配置,現在到CardCell.swift
內,定義一個方法:
func setupSecond(data: [String], indexPath: IndexPath)
{
self.backgroundColor = UIColor(red: 0.5843137503, green: 0.8235294223, blue: 0.4196078479, alpha: 1)
titleLabel.text = data[indexPath.row]
}
}
現在secondCollectionView
的cell
也已經設定好了,就等明天來做最關鍵的設置,讓頁面可以同時顯示兩個UICollectionView
。