2013-11-09 48 views
3

我要開發的應用程序使用自定義導航欄像下面的圖片:iOS的自定義形狀的導航欄

enter image description here

enter image description here

我認爲我需要繼承UINavigationBar的添加按鈕導航欄的中心,但我真的不知道如何使導航欄看起來像在圖像上。你能否給我建議我該怎麼做,鏈接到任何類型的文檔都會很棒!

關於導航欄類似的問題,這不幫助我:

編輯:

我的想法是下一步:使自定義導航欄的高度稍大於默認大小,並添加帶箭頭的背景圖像以及邊緣的一些透明度。

回答

5

如果你想要一個按鈕(你可能想要),你可以通過子類化UINavigationBar完全實現它。你應該記住heightUINavigationBar是隻讀屬性。

風格,但沒有可點擊:

因此,讓我們假設我們繼承導航欄,並添加按鈕那裏。你可以做到這一點,它會看起來很棒。例如:

- (void)drawRect:(CGRect)rect 
{ 
    self.backgroundColor = [UIColor lightGrayColor]; 
    UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(self.frame.size.width/2-50, 0 , 100, 100)]; 
    [myButton setBackgroundColor:[UIColor lightGrayColor]]; 
    [myButton setTitle:@"Normal" forState:UIControlStateNormal]; 
    [myButton setTitle:@"Highlighted" forState:UIControlStateHighlighted]; 
    [self addSubview:myButton]; 
    [self sendSubviewToBack:myButton]; 
} 

但你會面臨一個問題,你的按鈕低於UINvaigationBar非tapeable。 (我在答案底部張貼了一張圖片)

所以顯然沒有你想要遵循的路徑。甚至不要嘗試。

風格,但沒有可點擊2:

您可以重寫此方法在您的導航欄子

- (CGSize) sizeThatFits:(CGSize)size { 
    return CGSizeMake(custom_width, custom_height); 
} 

然後它使用UIBezierPath例如掩蓋

權(可點擊)方式:

Yo你必須創建一個視圖棒到你的UINavigationBar。我將在這裏做的(如果你想讓它到每一個屏幕)是:

  1. 使UIViewController一個類別,它可以繪製(例如 - 這是最簡單的方法)UIButton
  2. 風格這個「UIButton的」任何你想要的(如果你想
  3. 針行動「的UIButton」:[btn addTarget:self action:@selector(menuShow:) forControlEvents:UIControlEventTouchUpInside];
  4. menuShow:方法應該在你的類別進行申報
  5. 你可以叫你每次繪製按鈕。要重繪視圖控制器

正如你可以看到有會有的兩個獨立景觀:UINavigationBarUIButton這就是讓你這個小按鈕下設內容並使其具有可測性。

那麼,爲什麼不隱藏導航欄,並使用不同的視圖?因爲iOS7;)當Apple在iOS7中更改它時,例如,您必須重新生成僞導航條,只有其他視圖,您不需要執行任何操作。

enter image description here

+0

謝謝,這就是我正在尋找的! – ignotusverum

+0

很高興我能幫到;) – Kuba

+0

這對我來說是一個完美的解決方案,但是我能否澄清一下? 「使UIViewController的類別可以繪製(例如 - 這是最簡單的方法)UIButton」。 這是否意味着UIViewController類別重寫-drawRect或類似的東西? 並且是在你的AppDelegate中導入的類別,還是你的子類UINavigationBar並將其導入? 謝謝! – Ryan

1

您可以在導航欄上將自定義形狀視圖添加爲titleView。 只要確保clipsToBounds設置爲NO,所以它不會被剪裁。

2

您不需要子類UINavigationBar。創建UIView添加到它的UIImageView作爲背景與圖像在你需要的形狀,添加按鈕。

子類UINavigationController隱藏UINavigationBar,添加自定義導航欄。使用

+0

您不需要繼承UINavigationController。有一個「顯示導航欄」的選項。 – Fogmeister

2

首先隱藏導航欄 -

self.navigationController.navigationBarHidden = YES; 

然後與所需的高度創建的UIView,的導航欄的高度是44px.Then創建背景圖像視圖,所需的UIButton的對象和上創建的UIView添加的所有對象作爲一個子視圖它會像navigationBar.Thank你。