Альтернатива iOS8 MGSplitViewController
В моем приложении используется библиотека MGSplitViewController. До iOS7 он отлично работает, но для iOS8 он не работает должным образом из-за изменения поведения UIPopoverController в iOS8. Приложен скриншот запуска кода MGSplitView на iOS8:
![iOS 8 MGSplitView]()
который показывает неправильное поведение. Он должен быть похож на следующий снимок экрана:
![enter image description here]()
Я где-то читал, что библиотека MGSplitViewController не будет обновлена для исправлений iOS8. Кто-нибудь знает, есть ли у нас другая библиотека, которая отлично работает и для iOS8, и имеет аналогичные функции, такие как MGSplitViewController.
Ответы
Ответ 1
Я столкнулся с той же проблемой и нашел для нее исправление. Перейдите к MGSplitViewController.m
и найдите следующие строки в -splitViewSizeForOrientation:
(около строки 261):
width = height;
height = fullScreenRect.size.width;
Убедитесь, что он не запускается на iOS 8, так как iOS 8 будет обрабатывать размеры правильно. Может быть, так.
if (SYSTEM_VERSION_LESS_THAN(@"8.0") && UIInterfaceOrientationIsLandscape(theOrientation)) {
width = height;
height = fullScreenRect.size.width;
}
Затем найдите следующую строку в -reconfigureForMasterInPopover:
(вокруг строки 614):
[_hiddenPopoverController presentPopoverFromRect:CGRectMake(-2000, -2000, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
И убедитесь, что он не запускается на iOS 8. Опять же, может быть, так.
if (SYSTEM_VERSION_LESS_THAN(@"8.0")) {
[_hiddenPopoverController presentPopoverFromRect:CGRectMake(-2000, -2000, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
}
Ответ 2
Я модифицировал MGSplitViewController для решения проблем в прошлом, так что это может не решить вашу проблему полностью, так как другие исправления в моей копии контроллера могут способствовать решению.
Проблема заключается в том, что UIPopoverViewController (используется для _hiddenPopoverViewController в MGSplitViewController) вызывает [view removeFromSuperview] в masterViewController ПОСЛЕ вызывается willAnimateRotationToInterfaceOrientation. Мое текущее исправление для того, чтобы снова использовать мое приложение, - это изменить [MGSplitViewController didRotateFromInterfaceOrientation:] следующим образом:
- (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];
}
}
К сожалению, представление masterViewController добавляется в представление MGSplitViewController ПОСЛЕ поворота, поэтому оно выглядит немного "неуклюжим", но, по крайней мере, работает.