uisplitviewcontroller - iOS8 MGSplitViewController alternativa
uipopovercontroller (2)
Estoy usando la biblioteca MGSplitViewController en mi aplicación. Hasta iOS7 funciona bien, pero para iOS8 no está funcionando como se esperaba debido al cambio de comportamiento de UIPopoverController en iOS8. Adjunto está la captura de pantalla de ejecutar el código MGSplitView en iOS8:
que muestra el comportamiento incorrecto. Se supone que es como la siguiente captura de pantalla:
He leído en alguna parte que la biblioteca MGSplitViewController no se actualizará para las correcciones de iOS8. ¿Alguien sabe si tenemos otra biblioteca que también funciona bien para iOS8 y tiene características similares a MGSplitViewController?
Modifiqué el MGSplitViewController para tratar problemas en el pasado, por lo que es posible que esto no solucione completamente tu problema, ya que otras soluciones en mi copia del controlador podrían estar contribuyendo a la solución.
El problema es que el UIPopoverViewController (usado para _hiddenPopoverViewController en el MGSplitViewController) llama a [ver removeFromSuperview] en el control masterViewController DESPUÉS de que willAnimateRotationToInterfaceOrientation se llame. Mi solución actual para que mi aplicación vuelva a funcionar es modificar [MGSplitViewController didRotateFromInterfaceOrientation:] de la siguiente manera:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[self.masterViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
[self.detailViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
if([[[UIDevice currentDevice] systemVersion] hasPrefix:@"8"]) {
[self layoutSubviewsForInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation withAnimation:YES];
}
}
Desafortunadamente, la vista masterViewController se agrega a la vista MGSplitViewController DESPUÉS de la rotación, por lo que se ve un poco ''torpe'', pero al menos funciona.
Me enfrenté al mismo problema y encontré una solución para ello. Vaya a MGSplitViewController.m
y busque las siguientes líneas en -splitViewSizeForOrientation:
(alrededor de la línea 261):
width = height;
height = fullScreenRect.size.width;
Asegúrese de que no se ejecute en iOS 8, ya que iOS 8 manejará los tamaños correctamente. Quizás así.
if (SYSTEM_VERSION_LESS_THAN(@"8.0") && UIInterfaceOrientationIsLandscape(theOrientation)) {
width = height;
height = fullScreenRect.size.width;
}
A continuación, busque la siguiente línea en -reconfigureForMasterInPopover:
(alrededor de la línea 614):
[_hiddenPopoverController presentPopoverFromRect:CGRectMake(-2000, -2000, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
Y asegúrese de que no se ejecute en iOS 8. De nuevo, quizás así.
if (SYSTEM_VERSION_LESS_THAN(@"8.0")) {
[_hiddenPopoverController presentPopoverFromRect:CGRectMake(-2000, -2000, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
}