UICollectionViewを使っています。
ボタンを押すと違う文字をセルに表示します。

以下、技術的に困っています。
どうか皆様のお知恵を拝借させていただけないでしょうか。

collectionViewにおいて、その候補を表示するためのセルの幅を求めています。しかし、求めた幅になりません。
白いボタンを押下すると別の文字列に変わり、表示も変わりそれに合わせかセル幅も変わるはずですが、この時セル幅がぐちゃぐちゃになります。
printでウォッチしている数字は正しいようなんですが・・・

myCollectionView.reloadData()にて更新しています。
表示データはしっかり更新されます
。が、幅が正しく更新されません
正しい更新の方法(タイミングや場所、方法)を教えていただけないでしょうか?もしくは違う方法なのか?

最初の表示は以下のものです。
"001", "0", "あい", "あいう"
起動時の表示です。

画像の説明をここに入力

白いボタンを押下すると候補は以下のようになります。
"あ", "あいう", "あ", "あいうえお"
この時の表示です。

画像の説明をここに入力

表示が変わりますが、候補表示のが正しくなりません。
その為セルの幅が足りず、表示が
文字列によっては「...」だけ表示となってしまいます。
のようになってしまいます。逆に幅が広いセルになる事もありますし、セルが重なる事も、離れすぎる事もあります。

どうかよろしくお願いいたします。

シュミレーターテスト用、Swift2の最低限のコードは、以下の通りです。

import UIKit
import Foundation

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

    var button1: UIButton!
    var myCollectionView : UICollectionView!
    var listTest = ["001", "0", "あい", "あいう"]
    var layout = UICollectionViewFlowLayout()


    override func viewDidLoad() {
        super.viewDidLoad()

        // CollectionViewのレイアウトを生成.
        let layout = UICollectionViewFlowLayout()


        // Cell一つ一つの大きさ.
        layout.itemSize = CGSizeMake(20, 20)

        // Cellのマージン.
        layout.sectionInset = UIEdgeInsetsMake(1, 1, 1, 1)

        // セクション毎のヘッダーサイズ.
        layout.headerReferenceSize = CGSizeMake(2,2)

        // CollectionViewを生成.
        myCollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)

        // Cellに使われるクラスを登録.
        myCollectionView.registerClass(CustomUICollectionViewCell.self, forCellWithReuseIdentifier: "MyCell")

        myCollectionView.delegate = self
        print(myCollectionView.delegate)
        myCollectionView.dataSource = self

        self.view.addSubview(myCollectionView)

        self.button1 = UIButton(type: .System)
        self.button1 = UIButton(frame: CGRectMake(50, 50, 50,50))
        self.button1.setTitleColor(UIColor.blackColor(), forState: .Normal)
        self.button1.backgroundColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
        self.button1.layer.cornerRadius = 5   //角丸
        self.button1.layer.borderWidth = 1     //枠線
        self.button1.addTarget(self, action: "btnUp1:", forControlEvents:.TouchUpInside)
        self.button1.addTarget(self, action: "btnDown1:", forControlEvents:.TouchDown)

        self.view.addSubview(self.button1)
    }

    func btnDown1(sender: UIButton){

    }

    func btnUp1(sender: AnyObject){
        listTest = []
        listTest = ["あ", "あいう", "あ", "あいうえお"]
        myCollectionView.reloadData()
    }

    // 幅を決める関数
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
        let size: CGSize = listTest[indexPath.row].sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(20.0)])
        print(CGSizeMake(size.width + 20.0, 25))
        return CGSizeMake(size.width + 20.0, 25) //self.flowLayout.itemSize.height)
    }

    /*
    Cellが選択された際に呼び出される
    */
    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

        print("Num: \(indexPath.row)")

    }

    /*
    Cellの総数を返す
    */
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 4
    }

    /*
    Cellに値を設定する
    */
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        let cell : CustomUICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! CustomUICollectionViewCell
        cell.textLabel?.text = listTest[indexPath.row]

        return cell
    }
}

class CustomUICollectionViewCell : UICollectionViewCell{

    var textLabel : UILabel?

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        // UILabelを生成.
        textLabel = UILabel(frame: CGRectMake(0, 0, frame.width, frame.height))
        textLabel?.text = "nil"
        textLabel?.backgroundColor = UIColor.whiteColor()
        textLabel?.textAlignment = NSTextAlignment.Center

        // Cellに追加.
        self.contentView.addSubview(textLabel!)
    }

}