我正在尝试建立我在应用程序中看到的视图。用户可以选择图像,并且可以对图像应用过滤器。问题是我的单元格大小不正确,并且收藏视图无法水平滚动。
extension SHViewController: UICollectionViewDataSource, UICollectionViewDelegate {
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! SHCollectionViewCell
var filteredImage = smallImage
if indexPath.row != 0 {
filteredImage = createFilteredImage(filterName: filterNameList[indexPath.row], image: smallImage)
}
cell.imageView.image = filteredImage
cell.filterNameLabel.text = filterDisplayNameList[indexPath.row]
updateCellFont()
return cell
}
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return filterNameList.count
}
public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
filterIndex = indexPath.row
if filterIndex != 0 {
applyFilter()
} else {
imageView.image = image
}
updateCellFont()
scrollCollectionViewToIndex(itemIndex: indexPath.item)
}
func updateCellFont() {
// update font of selected cell
if let selectedCell = collectionView.cellForItem(at: IndexPath(row: filterIndex, section: 0)) {
let cell = selectedCell as! SHCollectionViewCell
cell.filterNameLabel.font = UIFont.boldSystemFont(ofSize: 14)
}
for i in 0...filterNameList.count - 1 {
if i != filterIndex {
// update nonselected cell font
if let unselectedCell = collectionView.cellForItem(at: IndexPath(row: i, section: 0)) {
let cell = unselectedCell as! SHCollectionViewCell
if #available(iOS 8.2, *) {
cell.filterNameLabel.font = UIFont.systemFont(ofSize: 14.0, weight: UIFont.Weight.thin)
} else {
// Fallback on earlier versions
cell.filterNameLabel.font = UIFont.systemFont(ofSize: 14.0)
}
}
}
}
}
func scrollCollectionViewToIndex(itemIndex: Int) {
let indexPath = IndexPath(item: itemIndex, section: 0)
self.collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
}
}
class SHCollectionViewCell: UICollectionViewCell {
let filterNameLabel: UILabel = {
let label = UILabel()
return label
}()
let imageView: UIImageView = {
let iv = UIImageView()
return iv
}()
override init(frame: CGRect) {
super.init(frame: frame)
[filterNameLabel, imageView].forEach { addSubview($0) }
filterNameLabel.anchor(top: topAnchor, leading: leadingAnchor, bottom: nil, trailing: trailingAnchor)
imageView.anchor(top: filterNameLabel.bottomAnchor, leading: leadingAnchor, bottom: bottomAnchor, trailing: trailingAnchor)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
答案 0 :(得分:0)
使用UICollectionViewDelegateFlowLayout
并返回所需的单元格大小,像这样
extension SHViewController: UICollectionViewDelegateFlowLayout{
return CGSize(width: collectionView.frame.width/4, height: collectionView.frame.height)
}