Cómo hacer que UIScrollView haga zoom en una sola dirección cuando se usa el diseño automático

Estoy tratando de hacer que UIScrollView solo permita hacer zoom en la dirección horizontal. La vista de desplazamiento se configura con un enfoque puro de auto-distribución. El enfoque habitual es el sugerido en varias respuestas de desbordamiento de pila (p. Ej.éste) yotro recursos Lo he usado con éxito en las aplicaciones antes de que existiera el autolayout. El enfoque es el siguiente: en la vista de contenido de la vista de desplazamiento, anulosetTransform(), y modifique la transformación pasada para escalar solo en la dirección x:

override var transform: CGAffineTransform {
    get { return super.transform }
    set {
        var t = newValue
        t.d = 1.0
        super.transform = t
    }
}

También restablezco el desplazamiento del contenido de la vista de desplazamiento para que no se desplace verticalmente durante el zoom:

func scrollViewDidZoom(scrollView: UIScrollView) {
    scrollView.contentSize = CGSize(width: scrollView.contentSize.width, height: scrollView.frame.height)
    scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: 0.0)
}

Esto funciona muy bien cuando no se usa autolayout:

Sin embargo, cuando se utiliza la distribución automática, el desplazamiento del contenido termina mal durante el zoom. Mientras que el contenido solo se veescamas en dirección horizontal, se mueve verticalmente:

He puesto un proyecto de ejemploen GitHub (Solía hacer los videos en esta pregunta). Contiene dos guiones gráficos, Main.storyboard y NoAutolayout.storyboard, que son idénticos, excepto que Main.storyboard tiene activado el autolayout mientras que NoAutolayout no. Cambie entre ellos cambiando la configuración del proyecto de la interfaz principal y puede ver el comportamiento en ambos casos.

Realmente preferiría no desactivar la distribución automática, ya que resuelve una serie de problemas con la implementación de mi interfaz de usuario de una manera mucho mejor de lo que se requiere con el diseño manual. ¿Hay alguna manera de mantener el desplazamiento vertical de contenido correcto (es decir, cero) durante el zoom con autolayout?

EDITAR: He agregado un tercer guión gráfico, AutolayoutVariableColumns.storyboard, al proyecto de muestra. Esto agrega un campo de texto para cambiar el número de columnas en GridView, que cambia su tamaño de contenido intrínseco. Esto muestra más de cerca el comportamiento que necesito en la aplicación real que provocó esta pregunta.

Respuestas a la pregunta(4)

Su respuesta a la pregunta