2014-10-21 3 views

답변

15

편집 : IT는 모든이 솔루션이 작동해야 후, 나는

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는 82x49의 PNG입니다 캐시 몇 가지 문제가 있었다 것 같다, 내가 테스트 한 다른 크기지만 이것이 가장 잘 맞는 것 같습니다. 프레임의 width을 tabBar에있는 항목의 수로 나눕니다. 제 경우 5에서 "올바른 크기"의 새 UIImage를 만들고 selectionIndicatorImage으로 설정합니다.

+2

I 사용 배 및 3 배 장치를 지원하기 위해 : UIGraphicsBeginImageContextWithOptions (tabSize를 NO [UIScreen mainScreen] .scale); – AlexD

1

내 자동 조정 UITabBarController 하위 클래스입니다. 이미지를 제공하면 알려진 모든 iPhone 및 iPad에 맞춰 조정됩니다. 또한 특성 수집이 변경 될 때마다 크기를 업데이트하여 모든 새 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 
    } 
} 
관련 문제