Ancho y alto variables de UICollectionViewCell usando AutoLayout con Storyboard (sin XIB)

Aquí hay un problema de diseño en la aplicación que usa AutoLayout, UICollectionView y UICollectionViewCell que tiene un ancho y alto de tamaño automáticamente dependiendo de las restricciones de AutoLayout y su contenido (algo de texto).

Es una lista de UITableView como, con cada celda que tiene su propio ancho y alto calculados por separado para cada fila dependiendo de su contenido. Es más parecido a los mensajes iOS integrados en la aplicación (o WhatsUp).

Es obvio que la aplicación debe hacer uso defunc collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize.

El problema es que dentro de ese método, la aplicación no puede llamarfunc collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell nidequeueReusableCellWithReuseIdentifier(identifier: String, forIndexPath indexPath: NSIndexPath!) -> AnyObject para instanciar la celda, llenarla con contenido específico y calcular su ancho y alto. Intentar hacerlo resultará en llamadas de recursión indefinidas o algún otro tipo de bloqueo de la aplicación (al menos en iOS 8.3).

La forma más cercana de solucionar esta situación parece copiar la definición de la celda en la jerarquía de vista para permitir que el diseño automático cambie el tamaño de la "celda" automáticamente (como que la celda tenga el mismo ancho que la vista de colección principal), de modo que la aplicación pueda configurar la celda con contenido específico y Calcule su tamaño. Definitivamente, esta no debería ser la única forma de solucionarlo debido a los recursos duplicados.

Todo eso está relacionado con la configuración de UILabel.preferredMaxLayoutWidth en un valor que debería ser controlable por el diseño automático (no codificado) que podría depender del ancho y la altura de la pantalla o al menos configurarlo por definición de restricción de diseño automático, por lo que la aplicación puede obtener UILabel intrínseco multilínea Tamaño calculado.

No me gustaría crear instancias de celdas del archivo XIB, ya que Storyboards debería ser el estándar de la industria actual y me gustaría tener una menor intervención en el código.

EDITAR:

El código básico que no se puede ejecutar se enumera a continuación. Entonces, solo la instancia de cellProbe variable (no utilizada) bloquea la aplicación. Sin esa llamada, la aplicación funciona sin problemas.

var onceToken: dispatch_once_t = 0

class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

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

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

        dispatch_once(&onceToken) {

            let cellProbe = collectionView.dequeueReusableCellWithReuseIdentifier("first", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! UICollectionViewCell
        }

        return CGSize(width: 200,height: 50)
    }

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

        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("first", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! UICollectionViewCell

        return cell
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta