如何创建从屏幕顶部推送的UINavigationController?

时间:2012-12-28 21:20:46

标签: iphone ios uinavigationcontroller pushviewcontroller

我正在创建一个带有标准“Master-Detail”导航的iPhone应用程序,您可以在其中从UITableView中选择一个项目,并查看推送到屏幕上的ViewController中项目的Detail视图。

然而:与传统的UINavigationController不同,传统的UINavigationController从窗口的右侧推出细节屏幕,我想让我的细节屏幕从屏幕顶部下来。

我需要做什么?我是否必须继承UINavigationController? (我听说这不是个好主意)。我应该考虑哪些类进行子类化?

1 个答案:

答案 0 :(得分:3)

子类UINavigationController并覆盖pushViewController:animated:
不要立即打电话给超级,你做这样的自定义动画:

nextViewController.view.transform = CGAffineTransformMakeTranslation(0, -nextViewController.view.frame.size.height);

void(^animationBlock)(void) = ^{
    [super pushViewController:nextViewController animated:NO];
    nextViewController.view.transform = CGAffineTransformIdentity;
};

if (animated) {
    [UIView animateWithDuration:0.3f animations:animationBlock];
}
else{
    animationBlock();
}

更新

您实际上不需要继承UINavigationController。每次将VC推送到常规UINavigationController时,您也可以执行上述动画。