iOS8 MGSplitViewController替代方案

时间:2014-08-11 15:00:35

标签: uisplitviewcontroller uipopovercontroller ios8

我在我的应用中使用 MGSplitViewController 库。直到 iOS7 它运行正常,但对于 iOS8 ,由于iOS8中 UIPopoverController 的行为发生了变化,因此无法正常工作。附件是在iOS8上运行MGSplitView代码的屏幕截图:

iOS 8 MGSplitView

显示错误的行为。它应该像下面的截图:  enter image description here

我已经读过某个地方,MGSplitViewController库不会针对iOS8修复更新。有人知道我们是否有另一个适用于iOS8的库,并且具有与MGSplitViewController类似的功能。

2 个答案:

答案 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视图中,所以它看起来有点“笨拙”,但它至少起作用。