2016-04-28 16 views
1

プログラムでUICollectionViewの幅を設定したいとします。私はcollectionView.frameと.boundsを成功せずに変更しようとしました。UICollectionViewの幅をプログラムで設定する方法

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

+1

フレームを変更する必要があります。あなたのコードを追加してください...? –

+0

あなたのUICollectionViewのように、NSLayoutConstraintsを使用して位置決めしているようです。これを最初に確認してください。 –

答えて

1

を意味し、フルスクリーンを取っていますそれはviewDidLoad()です。 self.viewはライフサイクルのこの時点で配置されていません。 viewWillLayoutSubviews()は、self.viewがレイアウトされた後に呼び出され、サブビュー(UICollectionView)のレイアウトを手動で調整できるようにするため、使用するライフサイクルメソッドです。

0

あなたRectを構築するときにあなたは、あなたのViewControllerのビューのwidthを取得していることを意味する、self.view.frame.widthを使用しています。あなたが設定されているので、あなたが間違った幅を取得している理由は https://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/

:このViewControllerはおそらく、あなたがNSLayoutConstraint Sを使用する必要があります320個のiPhone 4上のピクセルまたはiPhone 5

関連する問題