如何以编程方式设置UICollectionView宽度

时间:2016-04-28 13:54:33

标签: ios swift

我想以编程方式设置UICollectionView的宽度。我试图修改collectionView.frame和.bounds但没有成功。

class CenterCellCollectionViewFlowLayout: UICollectionViewFlowLayout {
 override func targetContentOffsetForProposedContentOffset(proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
   if let cv = self.collectionView {
     let cvBounds = cv.bounds
     let width = cvBounds.size.width //this is always 600, it should be 320
   }
 }
 return super.targetContentOffsetForProposedContentOffset(proposedContentOffset)
}

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
 @IBOutlet weak var collectionView: UICollectionView!
 override func viewDidLoad() {
   super.viewDidLoad()
   collectionView.frame = CGRectMake(collectionView.frame.origin.x, collectionView.frame.origin.y, self.view.frame.width, collectionView.frame.height)
   collectionView.bounds = CGRectMake(collectionView.bounds.origin.x, collectionView.bounds.origin.y, self.view.frame.width, collectionView.bounds.height)
   let width = collectionView.bounds.width //this is 320
   collectionView.reloadData()
 }
}

Storyboard

2 个答案:

答案 0 :(得分:1)

你应该使用NSLayoutConstrainthttps://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/

您获得不正确宽度的原因是因为您要在viewDidLoad()中进行设置。生命周期中此时尚未列出self.viewviewWillLayoutSubviews()是您要使用的生命周期方法,因为它是在self.view布局后调用的,并允许您手动调整任何子视图(您的UICollectionView)布局。

答案 1 :(得分:0)

您在构建self.view.frame.width时使用的是Rect,这意味着您获得了width视图的ViewController。这个ViewController可能是全屏,这意味着iPhone 4或iPhone 5上有320像素。