title: UICollectionView horizantal scrolling Photo Gallery with swift
body: <p>I'm trying to make a Photo Gallery using <code>UICollectionView</code> with Swift. I want to display photos in full screen and swipe right to get to the next image. I have a working code for the portrait frame but as soon as I go to landscape it seems like my cell doesn't re-adjust itself to the correct position and size. </p>
  
  <p>Meaning that it keeps the same <code>width</code>,<code>height</code>, <code>x position</code> and <code>y position</code> of the portrait screen at all times. I also get this error on both portrait and landscape frame:</p>
  
  <p>->the behavior of the UICollectionViewFlowLayout is not defined because:</p>
  
  <p>->the item height must be less that the height of the UICollectionView minus the section insets top and bottom values.</p>
  
  <p>I have looked all over the web for an answer and have tried all possible solutions but it doesn't seem to be working for me. Let me know if anyone can help out with this. Much appreciated.</p>
  
  <p>Here is my code :</p>
  
  <pre><code>import UIKit
  
  class ImageDetailViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout,UINavigationControllerDelegate {
  
  
  @IBOutlet weak var imgDetailCollectionView: UICollectionView!
  
  var index: Int!
  var imageItems: Array&lt;Items&gt; = []
  var currentIndex: CGFloat!
  var size = UIScreen.mainScreen().bounds.size
  init(index: Int , imageItems: Array&lt;Items&gt;) {
      self.index = index
      self.imageItems = imageItems
      super.init(nibName: "ImageDetailViewController", bundle: NSBundle.mainBundle())
  }
  
  required init(coder aDecoder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
  }
  
  override func viewDidLoad() {
      super.viewDidLoad()
  
  
      imgDetailCollectionView.registerNib(UINib(nibName: "ImageDetailCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "ImageDetailCollectionViewCell")
      //self.automaticallyAdjustsScrollViewInsets = false
      imgDetailCollectionView.setZoomScale(0.5, animated: true)
  
  }
  
  
  
  
  override func viewDidLayoutSubviews() {
      imgDetailCollectionView.scrollRectToVisible(CGRectMake(320 * CGFloat(index), 0, 320 , 240), animated: false)
  }
  
  
  
  override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
  }
  
  func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -&gt; Int{
  
      return self.imageItems.count
  }
  
  
  func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -&gt; UICollectionViewCell{
  
  
  
  
  
  
      var cell = imgDetailCollectionView.dequeueReusableCellWithReuseIdentifier("ImageDetailCollectionViewCell", forIndexPath: indexPath) as ImageDetailCollectionViewCell
  
      cell.setup(imageItems[indexPath.row].url!)
  
      if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation)){
  
  
          self.imgDetailCollectionView.collectionViewLayout.invalidateLayout()
  
          var frame = cell.frame
          frame.size = CGSizeMake(size.width, size.height)
          cell.frame = frame
  
      }else{
          self.imgDetailCollectionView.collectionViewLayout.invalidateLayout()
  
          var frame = cell.frame
          frame.size = CGSizeMake(size.height, size.width)
          cell.frame = frame
      }
  
      return cell
  
  }
  
  
  func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -&gt; CGSize {
  
      var size = UIScreen.mainScreen().bounds.size
  
      if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation)){
  
  
          return CGSizeMake(size.width, size.height)
  
  
      }else{
  
          return CGSizeMake(size.height, size.width)
      }
  
  
  
  }
  
  func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -&gt; CGFloat {
      return 0
  }
  
  func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -&gt; CGFloat {
      return 0
  }
  
  
  override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
      self.imgDetailCollectionView.collectionViewLayout.invalidateLayout()
  
      var currentOffset = self.imgDetailCollectionView.contentOffset
      self.currentIndex = currentOffset.x / imgDetailCollectionView.frame.size.width
  
  }
  
  
  override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {
  
      var currentSize = imgDetailCollectionView.bounds.size
      var offset = self.currentIndex * currentSize.width
      imgDetailCollectionView.setContentOffset(CGPointMake(offset, 0), animated: false)
  
      imgDetailCollectionView.reloadData()
  }
  
  override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
  
      self.imgDetailCollectionView.collectionViewLayout.invalidateLayout()
  }
  }
  </code></pre>