iOS8 MGSplitViewController 替代品

Posted

技术标签:

【中文标题】iOS8 MGSplitViewController 替代品【英文标题】:iOS8 MGSplitViewController alternative 【发布时间】:2014-08-11 15:00:35 【问题描述】:

我在我的应用程序中使用 MGSplitViewController 库。在 iOS7 之前它可以正常工作,但对于 iOS8,由于 ios8 中 UIPopoverController 的行为发生变化,它无法按预期工作。附上iOS8运行MGSplitView代码截图:

这显示了错误的行为。它应该类似于以下屏幕截图:

我在某处读到 MGSplitViewController 库不会针对 iOS8 修复进行更新。有谁知道我们是否有另一个库也适用于 iOS8 并且具有与 MGSplitViewController 类似的功能。

【问题讨论】:

UISplitViewController,也许? 我想知道您是否找到了解决方案。我刚刚遇到了同样的问题。 【参考方案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];

【讨论】:

谢谢,这对我有用。对于其他人,我使用 'DeviceSystemMajorVersion() 我也使用相同的更改对其进行了修复。我正要将此添加到答案中。 @XYZ 那么请考虑将我的答案标记为正确,以便在遇到相同问题时可能偶然发现此问题的其他人更容易找到正确的解决方案。 此线程包含上面使用的SYSTEM_VERSION_LESS_THAN 宏:***.com/a/5337804/1415397 我需要在上面的代码中添加一个内容才能让它工作,因为我最终在拆分视图的底部看到了一个狭窄的黑/白条。我需要在splitViewSizeForOrientation: 的末尾用SYSTEM_VERSION_LESS_THAN(@"8.0") 检查包围height -= statusBarHeight; 行以使其消失。【参考方案2】:

我已经修改了 MGSplitViewController 以处理过去的问题,因此这可能无法完全解决您的问题,因为我的控制器副本中的其他修复可能有助于解决问题。

问题是 UIPopoverViewController(用于 MGSplitViewController 中的 _hiddenPopoverViewController)在调用 willAnimateRotationToInterfaceOrientation 之后在 masterViewController 上调用 [view removeFromSuperview]。我目前让我的应用程序再次运行的修复方法是更改​​ [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 视图中,所以它看起来有点“笨拙”,但它至少可以工作。

【讨论】:

以上是关于iOS8 MGSplitViewController 替代品的主要内容,如果未能解决你的问题,请参考以下文章

未调用 iOS8 接口旋转方法

iOS8 - 请求远程推送通知

IOS8:AVFoundation 相机冻结

推送通知未在 IOS8.1 中提供,但在少于 IOS8.1 时工作正常

ios8 的 Parse 推送通知中没有声音

iOS8如何设置TabBarItem图片