我工作的自定義導航控制器的外觀在我的應用程序如下所示:自定義UINavigationBar的最慣用的iOS5方式?
正如我SO研究在幾個小時後發現,有一噸的不同這樣做的方式,有些非常黑客,有些則更不如此。我有興趣找到Apple實現這一目標的最有效/最優雅的方式,隨着應用程序的增長,這將導致最少的痛苦。到目前爲止我看過的一些方法:
1)我通過[UINavigationBar外觀]應用圖像更改了導航欄的背景/高度,似乎工作正常。
UIImage *navBarImage = [UIImage imageNamed:@"navigation-bar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBarImage
forBarMetrics:UIBarMetricsDefault];
好像實現背景/高度變化的最「現代」的方式,但它最有可能撐不下去的方向變化。可以在這裏進行任何改進?
2)我更換了默認後退按鈕與在viewDidLoad中下面的推鑑於
// Set the custom back button
UIImage *buttonImage = [UIImage imageNamed:@"back.png"];
//create the button and assign the image
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
//set the frame of the button to the size of the image (see note below)
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
// offset the back button
button.contentEdgeInsets = UIEdgeInsetsMake(10, 5, -10, -5);
//create a UIBarButtonItem with the button as a custom view
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
我不是很喜歡這種解決方案,因爲它離開酒吧的定製控制器在導航堆棧頂部。 From the Apple docs這似乎就像他們寧願你完全繼承了UINavigationBar的並更換了一次,所有的導航控制器:
您也可以通過使用initWithNavigationBarClass指定自定義UINavigationBar的子類:toolbarClass:方法初始化導航控制器。
這是建議的路線嗎?我無法通過[UIBarButtonItem外觀]替換UINavigationBar的默認後退按鈕,因爲它仍然嘗試顯示按鈕中的文本,並且當您刪除文本時,根本不顯示該按鈕。建議?
3)頁面標題應該可以通過navigationItem.titleView替換爲另一個視圖。有什麼更好的嗎?
謝謝!