2014-10-21 3 views
7

Я использую следующий метод для установки индикатора выбора для выбранного элемента панели вкладок. Он хорошо работает для iPhone 4/4s/5/5s, но не в iphone 6/6 +.setSelectionIndicatorImage имеет неправильный размер для iphone 6 и iPhone 6+

[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"activeshape.png"] ]; 

Любое предложение

ответ

15

EDIT: кажется, что все-таки это решение должно работать, у меня были некоторые проблемы с кэшем

UIImage *selTab = [[UIImage imageNamed:@"tabHighlight"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
CGSize tabSize = CGSizeMake(CGRectGetWidth(self.view.frame)/5, 49); 
UIGraphicsBeginImageContext(tabSize); 
[selTab drawInRect:CGRectMake(0, 0, tabSize.width, tabSize.height)]; 
UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
// 
[self.tabBar setSelectionIndicatorImage:reSizeImage]; 

tabHiglight является PNG из 82x49, я проверил с другие размеры, но это, по-видимому, подходит лучше всего. Я разделяю width кадра на количество элементов, которые у меня есть в tabBar - в моем случае 5, затем я создаю новый UIImage из «правильного» размера и устанавливаю его как selectionIndicatorImage.

+2

Для поддержки 2x и 3x устройства я использовал: UIGraphicsBeginImageContextWithOptions (TabSize, НЕТ, [UIScreen В начало] .scale); – AlexD

1

Это мой автонастраиваемый подкласс UITabBarController. Просто обеспечьте изображение, и оно будет настроено на все известные iPhones и iPads. Он также будет обновлять размер всякий раз, когда коллекция признаков изменяется, поэтому он поддерживает все новые функции iPad и вращение.

import UIKit 

class TabBarController: UITabBarController { 
    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     updateSelectionIndicatorImage() 
    } 

    override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) { 
     super.traitCollectionDidChange(previousTraitCollection) 

     updateSelectionIndicatorImage() 
    } 

    func updateSelectionIndicatorImage() { 
     let width = CGRectGetWidth(tabBar.bounds) > 420 ? 420 : CGRectGetWidth(tabBar.bounds) 
     var selectionImage = UIImage(named: "TabSelectionIndicator") 
     let tabSize = CGSizeMake(width/5, 49) 

     UIGraphicsBeginImageContext(tabSize) 
     selectionImage?.drawInRect(CGRectMake(0, 0, tabSize.width, tabSize.height)) 
     selectionImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     tabBar.selectionIndicatorImage = selectionImage 
    } 
} 
Смежные вопросы