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