我在我的应用中使用 MGSplitViewController 库。直到 iOS7 它运行正常,但对于 iOS8 ,由于iOS8中 UIPopoverController 的行为发生了变化,因此无法正常工作。附件是在iOS8上运行MGSplitView代码的屏幕截图:
显示错误的行为。它应该像下面的截图:
我已经读过某个地方,MGSplitViewController库不会针对iOS8修复更新。有人知道我们是否有另一个适用于iOS8的库,并且具有与MGSplitViewController类似的功能。
答案 0 :(得分:17)
我遇到了同样的问题并找到了解决方法。转到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];
}
答案 1 :(得分:-1)
我已经修改了MGSplitViewController以处理过去的问题,因此这可能无法完全解决您的问题,因为我的控制器副本中的其他修复可能会对解决方案做出贡献。
问题是UIPopoverViewController(用于MGSplitViewController中的_hiddenPopoverViewController)在masterViewController上调用[view removeFromSuperview]后会调用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视图中,所以它看起来有点“笨拙”,但它至少起作用。