我试图创建一个集合视图,其中单元格显示具有可变长度的字符串.
Im使用此功能设置单元格布局:
- func collectionView(collectionView : UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) -> CGSize
- {
- var cellSize:CGSize = CGSizeMake(self.whyCollectionView.frame.width,86)
- return cellSize
- }
我想做的是根据我的cell.labelString.utf16Count长度操纵cellSize.height.
基本逻辑就是这样
- if((cell.labelString.text) > 70){
- cellSize.height = x
- }
- else{
- cellSize.height = y
- }
但是,我无法检索我的单元格标签长度,总是返回nil. (我觉得没有加载…
为了更好的理解,这里是完整的代码:
- // WhyCell section
- var whyData:NSMutableArray! = NSMutableArray()
- var textLength:Int!
- @IBOutlet weak var whyCollectionView: UICollectionView!
- //Loading data
- @IBAction func loadData() {
- whyData.removeAllObjects()
- var findWhyData:PFQuery = PFQuery(className: "PlacesWhy")
- findWhyData.whereKey("placeName",equalTo: placeName)
- findWhyData.findObjectsInBackgroundWithBlock({
- (objects:[AnyObject]!,error:NSError!)->Void in
- if (error == nil) {
- for object in objects {
- self.whyData.addObject(object)
- }
- let array:NSArray = self.whyData.reverSEObjectEnumerator().allObjects
- self.whyData = array.mutableCopy() as NSMutableArray
- self.whyCollectionView.reloadData()
- println("loadData completed. datacount is \(self.whyData.count)")
- }
- })
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- self.loadData()
- }
- func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
- return 1
- }
- func collectionView(collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int {
- return whyData.count
- }
- func collectionView(collectionView: UICollectionView,cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
- let cell:whyCollectionViewCell = whyCollectionView.dequeueReusableCellWithReuseIdentifier("whyCell",forIndexPath: indexPath) as whyCollectionViewCell
- // Loading content from NSMutableArray to cell
- let therew:PFObject = self.whyData.objectAtIndex(indexPath.row) as PFObject
- cell.userWhy.text = therew.objectForKey("why") as String!
- textLength = (therew.objectForKey("why") as String!).utf16Count
- self.whyCollectionView.layoutSubviews()
- // Displaying user information
- var whatUser:PFQuery = PFUser.query()
- whatUser.whereKey("objectId",equalTo: therew.objectForKey("reasonGivenBy").objectId)
- whatUser.findObjectsInBackgroundWithBlock({
- (objects: [AnyObject]!,error: NSError!)->Void in
- if !(error != nil) {
- if let user:PFUser = (objects as NSArray).lastObject as? PFUser {
- cell.userName.text = user.username
- // TODO Display avatar
- }
- }
- })
- return cell
- }
- func collectionView(collectionView : UICollectionView,86)
- return cellSize
- }
您可以在cellForItemAtIndexPath函数中动态设置单元格的框架,因此如果忽略sizeForItemAtIndexPath函数,您可以根据标签自定义高度.通过自定义大小,您可能需要查看集合视图布局流程,但希望这可以指向正确的方向.它可能看起来像这样:
- class CollectionViewController: UICollectionViewController,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {
- var array = ["a","as","asd","asdf","asdfg","asdfgh","asdfghjk","asdfghjklas","asdfghjkl","asdghjklkjhgfdsa"]
- var heights = [10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,90.0,100.0,110.0] as [CGFloat]
- override func viewDidLoad() {
- super.viewDidLoad()
- }
- override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
- return 1
- }
- override func collectionView(collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int {
- return array.count
- }
- override func collectionView(collectionView: UICollectionView,cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
- let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CellID",forIndexPath: indexPath) as Cell
- cell.textLabel.text = array[indexPath.row]
- cell.textLabel.sizeToFit()
- // Customize cell height
- cell.frame = CGRectMake(cell.frame.origin.x,cell.frame.origin.y,cell.frame.size.width,heights[indexPath.row])
- return cell
- }
- func collectionView(collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
- return CGSizeMake(64,64)
- }
- }
这给了动态高度