我想以编程方式设置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()
}
}
答案 0 :(得分:1)
你应该使用NSLayoutConstraint
:
https://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/
您获得不正确宽度的原因是因为您要在viewDidLoad()
中进行设置。生命周期中此时尚未列出self.view
。 viewWillLayoutSubviews()
是您要使用的生命周期方法,因为它是在self.view
布局后调用的,并允许您手动调整任何子视图(您的UICollectionView
)布局。
答案 1 :(得分:0)
您在构建self.view.frame.width
时使用的是Rect
,这意味着您获得了width
视图的ViewController
。这个ViewController
可能是全屏,这意味着iPhone 4或iPhone 5上有320像素。