簡體   English   中英

IOS 7中的自定義UITabbar問題

[英]Custom UITabbar issue in IOS 7

我自定義UITabbar的方法在IOS 5和IOS 6中運行良好,但在IOS7中Tabbar沒有顯示任何圖像。

IOS6結果:

在此輸入圖像描述

IOS7結果:

在此輸入圖像描述

在做了一些研究后,我嘗試修復現有的代碼,但沒有成功。我的代碼在ios6中工作正常

#import <Foundation/Foundation.h>


@interface CustomTabBarItem : UITabBarItem  
{
UIImage *selectedImg;
UIImage *unSelectedImg;
}

@property (nonatomic, retain) UIImage *selectedImg;
@property (nonatomic, retain) UIImage *unSelectedImg;

@end


#import "CustomTabBarItem.h"


@implementation CustomTabBarItem

@synthesize selectedImg;
@synthesize unSelectedImg;



-(UIImage *) selectedImage
 {
   return self.selectedImg;
}

-(UIImage *) unselectedImage
{
    return self.unSelectedImg;
}

@end

現在在appDelegate

self.tabBarController.delegate = self;

self.tabBarController.tabBar.frame = CGRectMake(0, self.tabBarController.tabBar.frame.origin.y, self.tabBarController.tabBar.frame.size.width, 49);

for(int i=1;i<=4;i++)
  {
    CustomTabBarItem *tabItem = [[CustomTabBarItem alloc] initWithTitle:@"" image:nil tag:0];
        tabItem.selectedImg=[UIImage imageNamed:[NSString stringWithFormat:@"tab_bar-%d_over_%@.png",i,deviceType]];
    tabItem.unSelectedImg=[UIImage imageNamed:[NSString stringWithFormat:@"tab_bar-%d_%@.png",i,deviceType]];

            UIEdgeInsets titleInsets = UIEdgeInsetsMake(6.0, 0.0, -6.0, 0.0);
    tabItem.imageInsets = titleInsets;
    [[self.tabBarController.viewControllers objectAtIndex:i-1] setTabBarItem:tabItem];
    [tabItem release];

  }

以上代碼在IOS6中運行良好,經過一些研究后我對IOS7進行了一些更改

 [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];

CustomTabBarItem *tabItem = [[CustomTabBarItem alloc] initWithTitle:@"" image:nil tag:0];

tabItem.image = [[UIImage imageNamed:[NSString stringWithFormat:@"tab_bar-%d_over_%@.png",i,deviceType]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];


   tabItem.selectedImage = [UIImage imageNamed:[NSString stringWithFormat:@"tab_bar-%d_%@.png",i,deviceType]];

但結果仍然相同,任何幫助將不勝感激,謝謝。

我在https://stackoverflow.com/a/20007782/1755055查看了我的答案。

我相信在ios7中使用外觀類屬性存在限制或錯誤。

您的標簽欄項目使用圖標圖像作為模板,並使用色調顏色對其進行着色。 Apple真正要求你做的是為大多數透明的標簽欄設計圖標,以便它們可以用作模板圖像。

有關設計這些內容的討論,請參閱MobileHIG文檔中的條形按鈕圖標 (第204頁)。

因此,要設置所選的標簽欄項,您需要在'UITabBarItem'上調用'setSelectedImage:',您可以從UIViewContoller獲取該項。 如果您的UIViewController的子類被選項卡上的NavigationController包裝,您將從該ViewController獲取選項卡欄項。

我使用故事板,所以我可以在Interface Builder中設置標簽圖像。 selectedImage屬性現在不可用,因此您必須在代碼中設置它。 我在每個主視圖控制器中執行此操作,這些控制器出現在每個選項卡中導航控制器堆棧的頂部。

您的示例需要按照設計渲染圖像,因此您還需要在圖像上設置渲染模式。

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    [self.navigationController.tabBarItem setSelectedImage:[[UIImage imageNamed:@"MySelectedIcon.png"]
         imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]];

}

它不是色調,但你可以使用圖像:

[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"item_seleted.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"item_unselected.png"]];

您是否嘗試過直接在標簽欄的實例上設置barTintColor而不是UIAppearance代理?

這是iOS 7中的已知問題.tintColor用於選定的選項卡圖像。 selectedImageTintColor完全被忽略。 沒有辦法着色未選擇的標簽圖像。

有關此問題,請參閱Apple開發者論壇https://devforums.apple.com/message/851126#851126上的討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM