uicollectionviewcell标签重新加载后未对齐

时间:2016-11-21 10:53:49

标签: ios swift uicollectionview

This is how it looks

我尝试使用代码在屏幕上呈现简单的集合视图。 但是contentview中的子视图没有正确地使用

我使用Xcode 7.3.1在swift 2.3中编码 这是发生了什么事?

这是代码

import Foundation
class CustomerOverdueViewController : BaseViewController , UICollectionViewDelegateFlowLayout {

    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var tableView: UITableView!

    @IBOutlet weak var lblTotalOverdue: UILabel!
    @IBOutlet weak var lblInvestedFunds: UILabel!

    @IBOutlet weak var segmentedControl: UISegmentedControl!

    var rangeArray = NSArray()
    var selectedOverdueIndex = 0
    var selectedColor = UIColor()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.title = "Customer Overdue"

    }


    @IBAction func segValueChanged(sender: UISegmentedControl) {

    }

    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 6
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        let reuseIdentifier = String("CustomerOverdueCollectionViewCell")
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CustomerOverdueCollectionViewCell
        return cell
    }

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){
    }


    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
    {
        return CGSize(width: collectionView.frame.size.width/2 - 10, height: collectionView.frame.size.height/3 - 10)
    }

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets
    {
        return UIEdgeInsets(top: 5, left: 5, bottom: 0, right: 5)
    }
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat
    {
        return 10.0
    }
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat
    {
        return 10.0
    }

}

2 个答案:

答案 0 :(得分:1)

似乎在初始调用中,在首次绘制表时使用数据(来自ViewWillLoad)。但是,刷新数据时,不会重新计算约束。

通常这是通过setNeedsLayout和/或layoutIfNeeded完成的 你可以尝试:

[view layoutIfNeeded];

答案 1 :(得分:1)

最后我得到了解决方案

覆盖自定义单元格中的layoutSubviews

override func layoutSubviews() {
    super.layoutSubviews()
    self.layoutIfNeeded()
}

并在cellForItemAtIndexpath

中添加以下行
    cell.setNeedsLayout()
    cell.layoutIfNeeded()
相关问题