Soporte de orientación horizontal para horizontalSizeClass = .Regular en iOS

Estoy intentando crear una aplicación que admita orientaciones vertical y horizontal para dispositivos iOS con class de tamaño horizontal regular y retrato solo para el rest.

Al momento de escribir esto, sería: Retrato solamente (para iPhones excepto 6 Plus / 6s Plus) y Portrait AND Landscape para iPhone 6 Plus / 6s Plus e iPad.

Este es un comportamiento similar realizado por la aplicación de correo nativa.

He intentado, entre otras cosas, lo siguiente:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { return [.Portrait, .LandscapeLeft, .LandscapeRight] } override func shouldAutorotate() -> Bool { return (traitCollection.horizontalSizeClass == .Regular) } 

Sin embargo, debería llamarse Obviamente a autorizar antes de que la interfaz gire, por lo que eso sucede antes de que se cambie la colección de trait.

Entonces, la pregunta es, ¿cómo lograr esto? Estoy tratando de lograr esto de la manera más limpia posible sin hacer reference explícitamente userInterfaceIdiom, tamaño de pantalla, etc.

 override var supportedInterfaceOrientations:UIInterfaceOrientationMask{ return [.portrait, .landscapeLeft, .landscapeRight] } override var shouldAutorotate:Bool { return (traitCollection.horizontalSizeClass == .regular) || (traitCollection.displayScale > 2); }