我有一個CollectionView(subclassed CollectionViewController)在另一個視圖的容器視圖內。 CollectionViewCells在Interface Builder中定義,幷包含一個帶有更多子視圖的UIView。UICollectionViewCell子視圖大小不正確
我的收藏視圖包含7個部分,每個部分包含1個項目。這些部分有一個定義的插圖和大小(通過CollectionViewDelegateFlowLayout)。每個單元格都應該填充集合視圖的大小,不帶插頁。
問題似乎是單元格內的視圖不能正確渲染。使用約束它被設置爲固定到每一邊,但是這似乎不起作用。
我已經嘗試記錄細胞本身的寬度和高度與細胞內的視圖。當我滾動瀏覽collectionView時,所有奇數單元顯示的內容大小遠小於單元格的大小。這也適用於第一個偶數單元,但直到我滾動到第二個偶數單元爲止。由於這種大小差異,細胞的子視圖不會在all.ui渲染
我的IB設置:
CollectionViewController:
// MARK: CollectionViewController
class DayViewController: UICollectionViewController {
// MARK: Properties
private let reuseIdentifier = "DayCell"
// MARK: CollectionViewDataSource
override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 7
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 1
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! DayViewCell
NSLog("%f — %f", cell.bounds.width, cell.content.bounds.width)
return cell
}
}
// MARK: CollectionViewDelegateFlowLayout
extension DayViewController : UICollectionViewDelegateFlowLayout {
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
// return CGSize(width: collectionView.bounds.width - 40.0, height: collectionView.bounds.height - 40.0)
return CGSize(width: collectionView.bounds.width - 40.0, height: collectionView.bounds.height - 40.0)
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0)
}
}
CollectionViewCell:
class DayViewCell: UICollectionViewCell {
override var bounds: CGRect {
didSet {
contentView.frame = bounds
}
}
@IBOutlet weak var content: UIView!
@IBOutlet weak var progress: UIView!
@IBOutlet weak var rank: UILabel!
@IBOutlet weak var remainingRep: UILabel!
override func drawRect(rect: CGRect) {
super.drawRect(rect)
layer.cornerRadius = 5
layer.shadowOffset = CGSize(width: 0, height: 2)
layer.shadowOpacity = 0.5
layer.shadowColor = UIColor.blackColor().CGColor
layer.shadowRadius = 5
layer.masksToBounds = false
clipsToBounds = false
}
override func layoutSubviews() {
super.layoutSubviews()
content.layer.cornerRadius = 5
content.clipsToBounds = true
progress.frame = CGRect(x: 0, y: 0, width: 100, height: 22)
}
}
運行:(奇細胞/甚至細胞上第一渲染/偶小區上第二渲染)
非常感謝您的意見。我仍然在學習一些零碎的東西,以至於應該去哪些地方非常感謝。我在這裏上傳了這個項目:https://www.dropbox.com/s/8w9vzww72ghrl3r/Wolfswood%20Companion.zip?dl=0。 – Sacha