0

我正在开发具有多个皮肤的应用程序,我对如何实现这一点有困惑。用UIView替换UINavigationControllers NavigationBar

其中一个解决方案是为每个皮肤分别提供不同的nib文件,并根据当前选择的皮肤来加载它。与此问题是,我不能编辑导航栏的导航栏(我的应用程序使用),我不得不改变它的背景图片和后退按钮图像等。我想出了一个想法,以隐藏每个导航栏屏幕并将其替换为界面生成器中的自定义UIView,它将充当导航栏和带有IBAction的自定义后退按钮,用于弹出当前视图控制器,以便用户不会看到任何区别。

这种方法是否可以接受,如果我这样做,我会在App Store中遭拒绝吗?

+0

用UIView作为导航栏接受您的应用程序吗? – NeverHopeless

回答

2

如果您选择隐藏&用您自己的UIView替换UINavigationBar,就苹果而言它没有问题。

但是,我可以告诉你,你将不得不花一些时间来复制UINavigationBar自然产生的一些视觉效果。

例如,当您按下/弹出一个新的控制器时,您会看到导航栏标题将滑动&美丽地褪色。这同样适用于左右栏项目。

就我个人而言,我不会完全隐藏UINavigationBar,但可以自定义它。最后,这一切都取决于你想要的,但默认情况下,UINavigationBar是非常可定制的。

您可以添加自己的按钮甚至整个UIViews作为左右栏项目。此外,您可以添加自己的UIView作为标题(使用自己的标签,自定义字体或其他)或更改背景。

编辑:

轻松定制的外观在整个应用程序,你也可以继承的UINavigationController并创建自己的CustomUINavigationController。然后,在viewDidLoad方法中,您可以更改导航栏的任何内容,并且可以在整个应用程序中访问它。

+0

谢谢安德烈,我想我会跟你的建议。基本上我必须做同样的事情,因为这是http://idevrecipes.com/2011/01/12/how-do-iphone-apps-instagramreederdailybooth-implement-custom-navigationbar-with-variable-width-back-按钮/ – savudin

+0

在IOS5中,为了覆盖UINavigationController的drawRect,你将不得不做一个小小的破解。像这样:http://stackoverflow.com/questions/7657465/uinavigationbars-drawrect-is-not-called-in-ios-5-0 –

+0

我是UINavigationBar的子类并重写它的drawRect。我已经在iOS 4.3和iOS 5中测试过,并且工作正常。 – savudin

0

没办法,你在做什么是完美的。这将工作&没有办法它会被拒绝从应用商店(只是基于这种方法)。我也探索了几种提供皮肤的方法&你写的东西似乎是最简单的 - 一些。另外,它更容易在界面生成器中创建UI元素,因此针对不同皮肤的单独nib文件。

我在说这个如此自信'因为我做了同样的事情&应用程序商店批准。

祝你好运。

+0

感谢斯里卡尔回答。 – savudin