IOS collectionView.sizeForItemAtIndexPath breaks down to everything that was before iPhone 6

I am new to iOS development and I am trying to migrate a project that I have on Android for iOS. I am trying to build a collectionView in code as part of an implementation. The fact is that the data in each cell in the form of a collection can be different string sizes, each cell can be a different size for the neighbor. I am experimenting with the attached code, but I noticed that with the iPhone 6, either the physical device or the simulator, the user interface looks as expected ... everything else looks terribly broken. It seems that sizeForIndexItemAtPath is violating it. Any ideas? TIA

import UIKit class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource { var collectionView: UICollectionView? var thisCellHeight: CGFloat = 0.0 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let screenSize: CGRect = UIScreen.mainScreen().bounds let screenWidth = screenSize.width let screenHeight = screenSize.height var thisWidth = screenWidth - 10 let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() layout.sectionInset = UIEdgeInsets(top: 70, left: 10, bottom: 10, right: 10) layout.itemSize = CGSize(width: thisWidth, height: 120) collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout) //collectionView!.backgroundView?.backgroundColor = UIColor.blueColor() collectionView!.dataSource = self collectionView!.delegate = self collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell") collectionView!.backgroundColor = hexStringToUIColor("#15ADFF") self.view.addSubview(collectionView!) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 14 } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as UICollectionViewCell cell.backgroundColor = UIColor.whiteColor() var typeLabel = UILabel(frame: CGRectMake(10, 0, 200, 21)) typeLabel.text = "Card Type" typeLabel.font = typeLabel.font.fontWithSize(20) cell.addSubview(typeLabel) var titleLabel = UILabel(frame: CGRectMake(10, 25, 300, 21)) titleLabel.text = "This Is The Article Title. This Is The Article Title. This Is The Article Title. This Is The Article Title." titleLabel.font = titleLabel.font.fontWithSize(20) titleLabel.numberOfLines = 0 titleLabel.sizeToFit() self.thisCellHeight = CGFloat(titleLabel.frame.height) println("The title text is \(self.thisCellHeight) high") cell.addSubview(titleLabel) var authorLabel = UILabel(frame: CGRectMake(10, thisCellHeight + 30, 200, 21)) authorLabel.text = "This Is The Article Author" authorLabel.font = authorLabel.font.fontWithSize(15) cell.addSubview(authorLabel) var timestampLabel = UILabel(frame: CGRectMake(10, thisCellHeight + 50, 200, 21)) timestampLabel.text = "This Is The Timestamp" timestampLabel.font = timestampLabel.font.fontWithSize(15) cell.addSubview(timestampLabel) return cell } func hexStringToUIColor (hex:String) -> UIColor { var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet).uppercaseString if (cString.hasPrefix("#")) { cString = cString.substringFromIndex(advance(cString.startIndex, 1)) } if (countElements(cString) != 6) { return UIColor.grayColor() } var rgbValue:UInt32 = 0 NSScanner(string: cString).scanHexInt(&rgbValue) return UIColor( red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0) ) } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { return CGSizeMake(320, 350) } } 
+7
ios iphone swift collectionview
source share
1 answer

You set the size of the element on the layout:

 layout.itemSize = CGSize(width: thisWidth, height: 120) 

And you also use the delegate method

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { return CGSizeMake(320, 350) } 

The first is redefined by the second. layout.itemSize - the default size for each element if the delegate method sizeForItemAtIndexPath not overridden. You are layout.itemSize with something that looks completely different. Try just removing the delegate function sizeForItemAtIndexPath , does this do what you expect?

+9
source share

All Articles