Отображение изображений в UITabBarController - ОБНОВЛЕНО

Я пытаюсь поместить изображение в свой пользовательский интерфейс. Controllers, представленный в качестве UITabBarItem, равен UINavigationControllers. Когда я пытаюсь поместить на них изображения, результат выглядит не очень хорошо. Я получаю только половину изображений, и изображения не отображают цвет.

введите здесь описание изображения

3 изображения, которые я использовал, имеют размер .png 50X50.

вот код, который я использовал

self.custCareVC = [[CustomerCareViewController alloc] initWithNibName:@"CustomerCareViewController_iPhone" bundle:NULL];
        self.POController = [[PurchaeOrderViewController alloc] initWithNibName:@"PurchaeOrderViewController_iPhone" bundle:NULL];
        self.accAndContactsController = [[AccountsAndContactsViewController alloc] initWithNibName:@"AccountsAndContactsViewController_iPhone" bundle:NULL];

self.customerCareNavController = [[UINavigationController alloc] initWithRootViewController:self.custCareVC];
    self.customerCareNavController.title = @"Customer Service";

    self.purchaseOrderNavController = [[UINavigationController alloc] initWithRootViewController:self.POController];
    self.purchaseOrderNavController.title = @"PO";

    self.accAndContactsNavController = [[UINavigationController alloc] initWithRootViewController:self.accAndContactsController];
    self.accAndContactsNavController.title = @"Accounts And Contacts";

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:self.customerCareNavController, self.accAndContactsNavController, self.purchaseOrderNavController, nil];

    UIImage *selectedImage0     = [UIImage imageNamed:@"cust_serv_bw_selected.png"];
    UIImage *unselectedImage0   = [UIImage imageNamed:@"cust_serv_bw.png"];

    UIImage *selectedImage1     = [UIImage imageNamed:@"contacts_bw_selected.png"];
    UIImage *unselectedImage1   = [UIImage imageNamed:@"contacts_bw.png"];

    UIImage *selectedImage2     = [UIImage imageNamed:@"po_bw_selected.png"];
    UIImage *unselectedImage2   = [UIImage imageNamed:@"po_bw.png"];

    UITabBar     *tabBar = self.tabBarController.tabBar;
    UITabBarItem *item0  = [tabBar.items objectAtIndex:0];
    UITabBarItem *item1  = [tabBar.items objectAtIndex:1];
    UITabBarItem *item2  = [tabBar.items objectAtIndex:2];

    item0.image = unselectedImage0;
    item0.selectedImage = selectedImage0;

    item1.image = unselectedImage1;
    item1.selectedImage = selectedImage1;

    item2.image = unselectedImage2;
    item2.selectedImage = selectedImage2;

    self.tabBarController.selectedViewController = self.customerCareNavController;

Как я могу исправить это. Почему это происходит?


person Shradha    schedule 09.12.2013    source источник
comment
Вы использовали HD-изображение с суфиксом @2x?   -  person Pull    schedule 09.12.2013
comment
Нет.. я не использовал @2x.. попробую и дам вам знать   -  person Shradha    schedule 09.12.2013
comment
я использовал @2x сейчас и пробовал с изображениями 30x30 и 50x50 ... но все еще не работает   -  person Shradha    schedule 09.12.2013


Ответы (2)


Здесь я отвечу точнее.

В документации говорится, что изображение панели вкладок обычно имеет размер 30x30, но я обнаружил, что лучший размер для установки изображений — 48x32 пикселя. Этот размер по-прежнему отображается и дает вам немного больше места.

Изображение в формате PNG с прозрачностью, используется только маска. Пользовательский интерфейс делает маску серой, если она не выбрана, или синей/хромированной, если она выбрана.

Если вы работаете с дисплеем Retina, вам нужно добавить изображение вдвое большего размера и с именем: [email protected].

Если вы хотите изменить цвет элемента, есть пример кода: Элемент управления какао TabBarController

person Pull    schedule 09.12.2013
comment
Нет.. я не использовал @2x.. попробую и дам вам знать - person Shradha; 09.12.2013
comment
я добавил @2x, и результат, который я получил, был обновлен в моем вопросе .. все еще не получил то, что мне нужно .. - person Shradha; 09.12.2013
comment
На панели вкладок выбранное изображение синее, остальные серые, даже если они были цветными. Какао наложил на него маску, чтобы сделать его серым, и вам нужно будет настроить tabbarcontroller, чтобы изменить это поведение. Ваше изображение должно быть размером 30x30, png и без текста. - person Pull; 09.12.2013
comment
Да .. точно .. настроить контроллер панели вкладок ?? значит ли это, что теперь мне придется создавать собственный контроллер панели вкладок?? есть ли способ остановить мое изображение от маскировки ?? - person Shradha; 09.12.2013
comment
Вы сможете изменить цвет фона, но не цвет элемента. Я никогда не видел способа сделать это легко, я думаю, что единственный способ - это найти, как настроить tabbarcontroler. Удачи, это будет непросто: возможно, это поможет вам: cococontrols.com/search?utf8=%E2%9C%93&q=tabbarcontroller ! - person Pull; 09.12.2013
comment
я не хочу менять цвет элемента, а просто хочу, чтобы tabbarcontroller показывал изображение как оно есть.. попробую ссылку, которую вы разместили - person Shradha; 09.12.2013
comment
Я понял, что вы хотите, но поведение такое, есть маска, и вы не можете изменить это. Возможно, вы найдете tabBarController в элементе управления какао, как вы хотите. - person Pull; 09.12.2013
comment
Если это поможет вам, не забудьте подтвердить и проголосовать, спасибо. - person Pull; 10.12.2013

Посмотрите, чтобы получить изображения нужного размера: Рекомендации по пользовательскому интерфейсу iOS: размеры значков и изображений

И если вы хотите использовать изображения большего размера, используйте код

    [item0 setImageInsets:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)];

для каждого tabBarItem. Это так же, как использование отступов в HTML.

А чтобы придать цвет изображениям и тексту, используйте фрагмент кода и измените его по мере необходимости:

    NSDictionary *attributeDictionary = [NSDictionary dictionaryWithObject:[UIColor darkGrayColor] forKey:UITextAttributeTextColor];
    [[UITabBarItem appearance] setTitleTextAttributes:attributeDictionary forState:UIControlStateNormal];
    UIColor *titleHighlightedColor = UIColorFromRGBAlphaOne(0xBD1550);
    attributeDictionary = [NSDictionary dictionaryWithObject:titleHighlightedColor forKey:UITextAttributeTextColor];
    [[UITabBarItem appearance] setTitleTextAttributes:attributeDictionary forState:UIControlStateSelected];

Методы легко понять по названию.

person Ravi Sisodia    schedule 09.12.2013
comment
Но использование 'setImageInset' не является хорошим подходом, так как изображения будут пикселизированы на устройствах без ратины. Использование изображений хорошего размера, как описано в ссылке, является хорошим и стандартным подходом. - person Ravi Sisodia; 09.12.2013