2014-10-21 18 views

Odpowiedz

15

EDIT: Wydaje się, że mimo wszystko to rozwiązanie powinno działać, miałem pewne problemy z pamięcią podręczną

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 JEST png od 82x49, Przetestowałem z inne rozmiary, ale wydaje się to pasować najlepiej. Podzielę width ramki przez liczbę elementów, które mam w tabBar - w moim przypadku 5, a następnie tworzę nowy UIImage "właściwego" rozmiaru i ustawię go jako selectionIndicatorImage.

+2

wspieranie 2x i 3x urządzeń co do stosowanych: UIGraphicsBeginImageContextWithOptions (tabSize NO [UIScreen mainScreen] .scale); – AlexD

1

Oto moja automatycznie dostosowująca podklasa UITabBarController. Wystarczy dostarczyć obraz, który dostosuje się do wszystkich znanych iPhone'ów i iPadów. Będzie również aktualizował rozmiar, gdy kolekcja cech ulegnie zmianie, więc obsługuje wszystkie nowe funkcje i obroty iPada.

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 
    } 
} 
Powiązane problemy