我已经在StackOverflow(和互联网上)搜寻了解决此问题的方法。这个问题已经被问过很多次,但正如您所指出的那样,从未得到充分的回答。许多
解决方案可以提供一个可接受的解决方案,但如果不重要,例如一个较低的工具栏也会卷曲起来,那么这些解决方案就无法胜任。
其他人提供了一种解决方案,使用UIView动画/CoreAnimation而不是UIModalTransitionStylePartialCurl作为模态转换样式;最坏的情况是这不是App Store允许的解决方案,而最好的情况则不完全与通过UIModalTransitionStylePartialCurl获得的效果相同(例如,卷曲的形状不同)。
这些解决方案都没有提供类似于Maps应用程序中苹果解决方案的答案(即使用UIModalTransitionStylePartialCurl,但在屏幕底部留下未卷曲的UIToolbar)。
我将继续遵循这种不完整回答的传统,因为你问到了一个UITabBarController,而我的解决方案并没有具体针对这种情况。然而,它确实解决了我的问题,即在页面底部有一个未卷曲的工具栏的半页卷曲问题。
可能有更优雅的方法来做到这一点,但这是我处理的方式。
我的AppDelegate的rootViewController是UIViewController的子类,我将其称为TAContainerViewController。TAContainerViewController管理屏幕的实际内容(要卷曲的“内容”),TAContentViewController,以及TAContentViewController“后面”的内容(例如设置),我将其称为TAUnderCurlViewController。
我的
TAContainerViewController
实例具有
TAContentViewController
和
TAUnderCurlViewController
的属性。我的内容
UIView
是
TAContentViewController
的
view
属性的子视图;同样,用户在翻页下方看到的是
TAUnderCurlViewController
的
view
属性。
在TAContainerViewController
的init
方法中,我确保执行以下操作:
_underCurlVC.modalTransitionStyle = UIModalTransitionStylePartialCurl
为了使内容卷曲以便在页面下方显示,我设置了一个调用以下代码的动作:
[self.contentVC presentModalViewController:self.underCurlVC animated:YES]
其中,self
是TAContainerViewController
,contentVC
是TAContentViewController
的实例,underCurlVC
是TAUnderCurlViewController
的实例。
要关闭视图,只需简单地使用[self.contentVC dismissModalViewControllerAnimated:YES];
。
当模态视图被关闭时,contentVC
的框架似乎会发生一些奇怪的事情,因此我在模态视图关闭时手动重置了框架。
我在Github上发布了一个带有更多细节的示例项目。希望有人可以将其转化为稍微更优雅的解决方案,或者扩展它以适用于UINavigationController
或UITabBarController
。我认为关键是将View Controllers从Cocoa子类中定义良好的关系中分离出来,所以可能需要对那些特殊的View Controllers进行子类化。