UIModalTransitionStylePartialCurl与UITabBarController

dan*_*ood 6 iphone uitabbarcontroller iphone-sdk-3.0 mkmapview ios4

这个问题在这里已经被问了很多,但据我所知,还有待全面回答.

我有UITabBarController一个UINavigationController作为根VC的标签之一,其本身就具有MKMapView作为其根VC.我想要的行为是让地图部分向上卷曲,同时保留标签栏(类似于地图应用).

到目前为止,我设法完成的工作是整个视图卷曲,这不是很好.

我看到的解决方案是将hidesBottomBarWhenPushed属性设置为NO,这有意义,但这似乎不起作用(除非我做错了).

为清楚起见,我的代码如下:

MyVC *aView = [MyVC init];
aView.modalTransitionStyle = UIModalTransitionStylePartialCurl;
aView.hidesBottomBarWhenPushed = NO;
Run Code Online (Sandbox Code Playgroud)

对于演示部分,我尝试了下面的两个替代方案,这两个方案似乎都不起作用:

[self presentModalViewController:updateStatus animated:YES];
[[self navigationController] presentModalViewController:updateStatus animated:YES];
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

Tim*_*ber 4

我在 StackOverflow(和互联网)上搜索了这个问题的解决方案。这个问题已经被问过很多次了,但正如你所注意到的,从未得到充分的回答。如果例如下部工具栏是否也卷起并不重要,则许多解决方案给出了可接受的解决方案。

其他人提供了使用UIView动画/CoreAnimation而不是UIModalTransitionStylePartialCurl作为模式过渡样式的解决方案;这在最坏的情况下是 App Store 不允许的解决方案,在最好的情况下与获得的效果并不完全相同UIModalTransitionStylePartialCurl(例如,卷曲的形状不同)。

这些解决方案都没有提供模仿苹果地图应用程序中的解决方案的答案(即使用但在屏幕底部UIModalTransitionStylePartialCurl保留不卷曲的部分)。UIToolbar

我将继续这种不完整答案的传统,因为您询问 aUITabBarController而我的解决方案并没有专门解决这种情况。然而,它确实解决了我遇到的问题,即卷曲半页,底部有一个不卷曲的工具栏。

必须有一种更优雅的方法来做到这一点,但这就是我的方法。

rootViewControllermy是 的子AppDelegateUIViewController,我将其称为TAContainerViewControllerTAContainerViewController管理a)屏幕的实际内容(“要卷曲的内容”),TAContentViewControllerb)“背后”的内容TAContentViewController(例如设置),我称之为TAUnderCurlViewController

我的实例TAContainerViewController具有 aTAContentViewController和 a的属性TAUnderCurlViewController。我的内容UIView是 的财产的子TAContentViewController视图view;同样,用户在卷曲下看到的内容viewTAUnderCurlViewController.

init方法中TAContainerViewController,我确保执行以下操作:

    _underCurlVC.modalTransitionStyle = UIModalTransitionStylePartialCurl;
Run Code Online (Sandbox Code Playgroud)

为了将内容卷曲以显示在页面下方,我设置了一个调用以下代码的操作:

    [self.contentVC presentModalViewController:self.underCurlVC animated:YES];`
Run Code Online (Sandbox Code Playgroud)

其中selfTAContainerViewControllercontentVC是 的实例TAContentViewControllerunderCurlVC是 的实例TAUnderCurlViewController

要驳回这种观点,只需简单地[self.contentVC dismissModalViewControllerAnimated:YES];

模态视图关闭时的框架似乎出现了一些奇怪的情况contentVC,因此我在模态视图关闭时手动重置框架。

我在Github上发布了一个包含更多详细信息的示例项目。希望有人可以将其变成一个稍微更优雅的解决方案,或者将其扩展为与 aUINavigationController或 一起使用UITabBarController。我认为诀窍是将视图控制器从 Cocoa 子类中明确定义的关系中拉出来,所以也许对那些特殊视图控制器进行子类化就可以做到这一点。