【问题标题】:Replacing UINavigationControllers NavigationBar with UIView用 UIView 替换 UINavigationController 导航栏
【发布时间】:2011-12-21 18:58:11
【问题描述】:

我正在开发具有多个皮肤的应用程序,但我对如何实现这一点感到两难。

其中一个解决方案是为每个皮肤设置单独的 nib 文件,并根据当前选择的皮肤加载它。问题是我无法编辑导航控制器的导航栏(我的应用程序使用),我必须更改它的背景图像和后退按钮图像等。我想出了一个想法来隐藏这个导航栏屏幕并将其替换为 Interface Builder 中的自定义 UIView,该 UIView 将充当导航栏和带有 IBAction 的自定义后退按钮,用于弹出当前 View Controller,这样用户就不会看到任何区别。

这种方法是否可以接受,如果我采用这种方法,我会在 App Store 中遇到拒绝问题吗?

【问题讨论】:

  • 您的应用是否接受 UIView 作为导航栏?

标签: iphone objective-c ios uinavigationcontroller customization


【解决方案1】:

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

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

例如,当您推送/弹出一个新控制器时,您会看到导航栏标题会漂亮地滑动和淡出。这同样适用于左右栏项目。

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

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

编辑:

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

【讨论】:

  • 谢谢安德烈,我想我会接受你的建议。基本上我必须做同样的事情,因为这是idevrecipes.com/2011/01/12/…
  • 在 IOS5 中,您将不得不做一个小技巧来覆盖 UINavigationController 的 drawRect。像这样:stackoverflow.com/questions/7657465/…
  • 我正在继承 UINavigationBar 并覆盖它的 drawRect。我已经在 iOS 4.3 和 iOS 5 中进行了测试,并且运行良好。
  • 糟糕,我忘了在一个类别中提及。在一个子类中,它工作正常......是的。
  • 用 ios11 只剩下替换这个该死的条了,因为苹果决定打破向后的能力
【解决方案2】:

没办法,你所做的是完美的。这将起作用并且不会被应用商店拒绝(仅基于这种方法)。我也探索了几种提供皮肤的方法,你写的似乎是最不麻烦的。此外,它更容易在 Interface Builder 中创建 UI 元素,因此可以为不同的皮肤使用单独的 nib 文件。

我这么自信地说,因为我做了同样的事情并获得了应用商店的批准。

祝你好运。

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多