Problema extraño con UIWindow en iPad mini en modo horizontal

He creado un post de tostado personalizado y agrego este post a una UIWindow personalizada (ya que quiero este post por encima de todo). Mi post de tostado personalizado no es más que una subclass de UIViewController y UIView de este UIViewController He agregado un UILabel que es el post de tostado.

En lo que respecta a la UIWindow personalizada, tomé esta class de JLToast tal como es y así es como se ve …

 public class JLToastWindow: UIWindow { public static let shanetworkingWindow = JLToastWindow(frame: UIScreen.mainScreen().bounds) /// Will not return `rootViewController` while this value is `true`. Or the rotation will be fucked in iOS 9. var isStatusBarOrientationChanging = false var shouldRotateManually: Bool { let iPad = UIDevice.currentDevice().userInterfaceIdiom == .Pad let application = UIApplication.shanetworkingApplication() let window = application.delegate?.window ?? nil let supportsAllOrientations = application.supportedInterfaceOrientationsForWindow(window) == .All let info = NSBundle.mainBundle().infoDictionary let requiresFullScreen = info?["UIRequiresFullScreen"]?.boolValue == true let hasLaunchStoryboard = info?["UILaunchStoryboardName"] != nil if #available(iOS 9, *), iPad && supportsAllOrientations && !requiresFullScreen && hasLaunchStoryboard { return false } return true } override public var rootViewController: UIViewController? { get { guard !self.isStatusBarOrientationChanging else { return nil } return UIApplication.shanetworkingApplication().windows.first?.rootViewController } set { /* Do nothing */ } } public override init(frame: CGRect) { super.init(frame: frame) self.userInteractionEnabled = false self.windowLevel = CGFloat.max self.backgroundColor = .clearColor() self.hidden = false self.handleRotate(UIApplication.shanetworkingApplication().statusBarOrientation) NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.bringWindowToTop), name: UIWindowDidBecomeVisibleNotification, object: nil ) NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.statusBarOrientationWillChange), name: UIApplicationWillChangeStatusBarOrientationNotification, object: nil ) NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.statusBarOrientationDidChange), name: UIApplicationDidChangeStatusBarOrientationNotification, object: nil ) NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.applicationDidBecomeActive), name: UIApplicationDidBecomeActiveNotification, object: nil ) } requinetworking public init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } /// Bring JLToastWindow to top when another window is being shown. func bringWindowToTop(notification: NSNotification) { if !(notification.object is JLToastWindow) { self.dynamicType.shanetworkingWindow.hidden = true self.dynamicType.shanetworkingWindow.hidden = false } } dynamic func statusBarOrientationWillChange() { self.isStatusBarOrientationChanging = true } dynamic func statusBarOrientationDidChange() { let orientation = UIApplication.shanetworkingApplication().statusBarOrientation self.handleRotate(orientation) self.isStatusBarOrientationChanging = false } func applicationDidBecomeActive() { let orientation = UIApplication.shanetworkingApplication().statusBarOrientation self.handleRotate(orientation) } func handleRotate(orientation: UIInterfaceOrientation) { let angle = self.angleForOrientation(orientation) if self.shouldRotateManually { self.transform = CGAffineTransformMakeRotation(CGFloat(angle)) } if let window = UIApplication.shanetworkingApplication().windows.first { if orientation.isPortrait || !self.shouldRotateManually { self.frame.size.width = window.bounds.size.width self.frame.size.height = window.bounds.size.height } else { self.frame.size.width = window.bounds.size.height self.frame.size.height = window.bounds.size.width } } self.frame.origin = .zero dispatch_async(dispatch_get_main_queue()) { JLToastCenter.defaultCenter().currentToast?.view.updateView() } } func angleForOrientation(orientation: UIInterfaceOrientation) -> Double { switch orientation { case .LandscapeLeft: return -M_PI_2 case .LandscapeRight: return M_PI_2 case .PortraitUpsideDown: return M_PI default: return 0 } } } 

Sé que hubo algunos cambios de implementación para UIWindow en iOS 8 , así que si agrego alguna vista a UIWindow (que es lo que estoy haciendo, agregando la vista de post de tostado a la UIWindow personalizada UIWindow ), esa UIView/UIWindow no recibirá ningún cambio de rotation . este problema es manejar por la window anterior gracias a JLToast buddy. Mi post de tostado funciona bien en casi todos los dispositivos, pero el problema es con iPad mini 9.3.1 y iPad 3 8.3 (en dispositivos de descanso y versiones, esto funciona bien) UIWindow / UIView no gira al iniciar la aplicación con Landscape o mueve el dispositivo a Landscape . Curiosamente, el brindis se muestra bien en iPad mini 9.2 pero no en iPad mini 9.3.1 .

Cualquiera puede proporcionar un puntero para este problema.

EDITAR: por favor, encuentre la versión parcial de progtwig Código aquí Como ya mencioné, este problema se puede encontrar en iPad Mini iOS 9.3.1 (Non-Retina) e iPad 3 iOS8.3, según lo que encontré.