[英]How to implement Custom UICollectionViewCell using Swift in iOS
[英]Swift : How to set Custom UICollectionViewCell as circle?
我自定義UICollectionViewCell
包含UILabel
和UIImage
。 我想以圓形格式設置單元格。
注意:- sizeForItemAtIndexPath
由於自動布局而無法更改。
以下是我使用過的代碼:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath ) -> CGSize {
return CGSize(width: (self.objKeypadCollectionView.frame.size.width/3)-10, height: (self.objKeypadCollectionView.frame.size.height/4)-10)
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let objKeypadCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("idKeypadCollectionViewCell", forIndexPath: indexPath) as! KeypadCollectionViewCell
if (self.numberArray[indexPath.item])=="asda" {
objKeypadCollectionViewCell.lblNumber.text = ""
objKeypadCollectionViewCell.imgPrint.hidden = false
}
else if (self.numberArray[indexPath.item])=="Derterel" {
objKeypadCollectionViewCell.lblNumber.text = self.numberArray[indexPath.item]
objKeypadCollectionViewCell.imgPrint.hidden = true
}
else {
objKeypadCollectionViewCell.imgPrint.hidden = true
objKeypadCollectionViewCell.lblNumber.text = self.numberArray[indexPath.item]
objKeypadCollectionViewCell.layer.borderColor = UIColor.lightGrayColor().CGColor
objKeypadCollectionViewCell.layer.borderWidth = 1
objKeypadCollectionViewCell.layer.cornerRadius = objKeypadCollectionViewCell.frame.size.width/2
}
return objKeypadCollectionViewCell
}
這是我的 UICollectionView 示例,您可以檢查您的解決方案。 我正在使用故事板通過 AutoLayout 設置主 collectionView。 此外,附上一些屏幕截圖以闡明結果。
有一個方法叫做drawRect()
。 你可以在你的 collectionView Cell 類中使用它來做 UI 的事情。
現在這是我的代碼。
1. ViewController.swift //只是像你一樣的普通UIViewController
,沒有別的... :)
//
// ViewController.swift
// CollectionCheckCircle
//
// Created by Tuhin Samui on 02/09/16.
// Copyright © 2016 Tuhin Samui. All rights reserved.
//
import UIKit
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 200
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cellOfCollection = collectionView.dequeueReusableCellWithReuseIdentifier("cellCollectionView", forIndexPath: indexPath) as! CollectionViewCell
return cellOfCollection
}
}
2. CollectionViewCell.swift //只是一個UICollectionViewCell
類,用於使單元格出列。
//
// CollectionViewCell.swift
// CollectionCheckCircle
//
// Created by Tuhin Samui on 02/09/16.
// Copyright © 2016 Tuhin Samui. All rights reserved.
//
import UIKit
class CollectionViewCell: UICollectionViewCell {
@IBOutlet weak var imageView: UIImageView!
override func drawRect(rect: CGRect) { //Your code should go here.
super.drawRect(rect)
self.layer.cornerRadius = self.frame.size.width / 2
}
}
注:我沒有使用任何任何flowlayout
的UICollectionViewFlowLayout
或單元尺寸內sizeForItemAtIndexPath
此的CollectionView。 你也可以添加這些東西。 請根據您的需要做一些實驗。 順便說一句,我使用的是 Xcode 7.3.1 和 Swift 2.2。
這是模擬器上 collectionView 設置和結果的故事板截圖。
希望這有幫助。 抱歉,有任何錯誤。
只需嘗試將角半徑設置為高度/ 2,確保單元格應具有相同的高度和寬度。
cell.layer.cornerRadius = min(cell.frame.size.height, cell.frame.size.width) / 2.0
cell.layer.masksToBounds = true
請讓我知道這是否適合您。
問題是單元格的width
和height
在運行時根據您的屏幕寬度更改,因此要解決此問題,請在單元格內添加一個方形UIView
並在cellForItemAtIndexPath
方法中使用該UIView
使其成為這樣的圓形視圖。
objKeypadCollectionViewCell.circleView.layer.borderColor = UIColor.lightGrayColor().CGColor
objKeypadCollectionViewCell.circleView.layer.borderWidth = 1
objKeypadCollectionViewCell.circleView.layer.cornerRadius = objKeypadCollectionViewCell.frame.size.width/2
objKeypadCollectionViewCell.circleView.layer.masksToBounds = true
使用這個更新的單元格。
class KeypadCollectionViewCell: UICollectionViewCell {
var circularBGLayer: CALayer!
override func awakeFromNib() {
super.awakeFromNib()
backgroundColor = UIColor.clearColor()
circularBGLayer = CALayer()
circularBGLayer.backgroundColor = UIColor.lightGrayColor().CGColor
layer.addSublayer(circularBGLayer)
}
override func layoutSubviews() {
super.layoutSubviews()
var frame = self.bounds
frame.size.width = min(frame.width, frame.height)
frame.size.height = frame.width
circularBGLayer.bounds = frame
circularBGLayer.cornerRadius = frame.width*0.5
circularBGLayer.position = CGPoint(x: frame.midX, y: frame.midY)
}
}
通過給出這條線來計算你的單元格的高度
return CGSize(width: (self.objKeypadCollectionView.frame.size.width/3)-10, height: (self.objKeypadCollectionView.frame.size.height/4)-10)
你無法實現你想要的。 使用縱橫比技術。 對於單元格的高度和寬度,請使用您的屏幕寬度,並根據該縱橫比更新您的單元格高度和寬度,然后此行才有效....
如果你需要澄清Skype我iammubin38
你可以試試 UICollectionViewDelegateFlowLayout ....
首先添加委托。
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let collectionWidth = CGRectGetWidth(collectionView.bounds);
var itemWidth = collectionWidth / 3 - 1;
return CGSizeMake(itemWidth, itemWidth);
}
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
return 1
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
return 1
}
}
嘿檢查這個代碼。
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath ) -> CGSize {
CGSize size = CGSize(width: (self.objKeypadCollectionView.frame.size.width/3)-10, height: (self.objKeypadCollectionView.frame.size.height/4)-10);
CGFloat width = size.width;
CGFloat height = size.height;
if (width < height) {
height = width;
} else {
width = height;
}
return size;
}
在迅捷 5
import UIKit
import Kingfisher
class StoryCollectionViewCell: UICollectionViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
// this override can make the circle
override func draw(_ rect: CGRect) {
super.draw(rect)
self.layer.cornerRadius = self.frame.size.width / 2
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.