2015-09-19 13 views
5

Ich arbeite in einer Anwendung, wo ich in UITabbarItem Unterstreichung hinzufügen muss.iOS: Hinzufügen von Unterstrichen in UITabBarItem

so würde ich gerne unter der ausgewählten UITabbarItem in Standard UITabbarcontroller von iOS Unterstreichung hinzufügen.

Ich habe bereits Unterklasse von UITabbarcontroller erstellt, aber keine Möglichkeit gefunden, Zeile in diesem hinzuzufügen.

Ich möchte etwas wie unten Bild zu tun.

UITabbarWithUnderline Image

Wenn jemand eine Idee für diese bitte hier teilen.

Antwort

9

Bitte versuchen Sie diese. habe ich einmal in meiner Bewerbung verwendet und hoffe es wird dir auch weiterhelfen.

Dies ist, wie ich Tab-Leiste programmatisch erstellt haben: Zeigen

 UITabBarController *tab = [[UITabBarController alloc]init]; 
     ViewController1 *v1 = [[ViewController1 alloc]init]; 
     ViewController1 *v2 = [[ViewController1 alloc]init]; 
     ViewController1 *v3 = [[ViewController1 alloc]init]; 
     ViewController1 *v4 = [[ViewController1 alloc]init]; 

     tab.viewControllers = [NSArray 
arrayWithObjects:v1,v2,v3,v4,nil]; 

     [[tab.tabBar.items objectAtIndex:0]setImage:[UIImage imageNamed:@""]]; 
     [[tab.tabBar.items objectAtIndex:1]setImage:[UIImage imageNamed:@""]]; 
     [[tab.tabBar.items objectAtIndex:2]setImage:[UIImage imageNamed:@""]]; 
     [[tab.tabBar.items objectAtIndex:3]setImage:[UIImage imageNamed:@""]]; 
     int divide = 4; 
     if([UIDevice currentDevice].userInterfaceIdiom ==UIUserInterfaceIdiomPad) 
      divide =6; 
     } 
     UIView *view = [[UIView alloc]initWithFrame:CGRectMake(tab.tabBar.frame.origin.x,tab.tabBar.frame.origin.y, self.view.frame.size.width/divide, 56)]; 

     UIImageView *border = [[UIImageView alloc]initWithFrame:CGRectMake(view.frame.origin.x,view.frame.size.height-6, self.view.frame.size.width/divide, 6)]; 
     border.backgroundColor = “your color”; 
     [view addSubview:border]; 
     [tab.tabBar setSelectionIndicatorImage:[self changeViewToImage:view]]; 

//This is the method that will draw the underline 
-(UIImage) changeViewToImage : (UIView) viewForImage { 
     UIGraphicsBeginImageContext(viewForImage.bounds.size); 
     [viewForImage.layer renderInContext:UIGraphicsGetCurrentContext()]; 
     UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     return img; 
} 
+0

dieser Code hat auch für ipad funktioniert ... (y) –

-1

Mit diesem Code eine untere Grenze zu jedem UIView Objekt hinzufügen möchten, ersetzen Sie einfach view mit Ihrem UITabbarItem Objekt:

CALayer *bottomBorder = [CALayer layer]; 
bottomBorder.frame = CGRectMake(0, view.frame.size.height - 1, view.frame.size.width - 1, 1); 
bottomBorder.backgroundColor = [UIColor lightGrayColor].CGColor; 
[view.layer addSublayer:bottomBorder]; 
+0

Haben Sie diese Lösung selbst überprüfen? 'UITabBarItem' erbt nicht von' UIView' und besitzt nicht die Eigenschaft 'layer'. – Eimantas

4

einfach diesen Code in AppDelegate.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
// Override point for customization after application launch. 

UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake([UITabBar appearance].frame.origin.x,[UITabBar appearance].frame.origin.y, [[UIScreen mainScreen] bounds].size.width/3, 56)]; 

UIImageView *border = [[UIImageView alloc]initWithFrame:CGRectMake(view1.frame.origin.x,view1.frame.size.height-6, [[UIScreen mainScreen] bounds].size.width/3, 6)]; 
border.backgroundColor = [UIColor colorWithRed:255.0f/255.0f green:105.0f/255.0f blue:84.0f/255.0f alpha:1.0f]; 
[view1 addSubview:border]; 
UIImage *img=[self ChangeViewToImage:view1]; 
[[UITabBar appearance] setSelectionIndicatorImage:img]; 
[[UITabBar appearance] setTintColor: [UIColor colorWithRed:255.0f/255.0f green:105.0f/255.0f blue:84.0f/255.0f alpha:1.0f]]; 

return YES; 
} 
-(UIImage *) ChangeViewToImage : (UIView *) viewForImage 
{ 
UIGraphicsBeginImageContext(viewForImage.bounds.size); 
[viewForImage.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return img; 
} 
4

Im AppDelegate didFininshLaunch Methode hinzufügen globalen Stil für UITabBar

UITabBar.appearance().selectionIndicatorImage = UIImage.getImageWithColorPosition(UIColor.whiteColor(), size: CGSizeMake(kScreenWidth/4, 49), lineSize: CGSizeMake(kScreenWidth/4, 2)) 

class func getImageWithColorPosition(color: UIColor, size: CGSize, lineSize: CGSize) -> UIImage { 
    let rect = CGRectMake(0, 0, size.width, size.height) 
    let rectLine = CGRectMake(0, size.height-lineSize.height, lineSize.width, lineSize.height) 
    UIGraphicsBeginImageContextWithOptions(size, false, 0) 
    UIColor.clearColor().setFill() 
    UIRectFill(rect) 
    color.setFill() 
    UIRectFill(rectLine) 
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return image 
} 

EDIT Swift 3

func getImageWithColorPosition(color: UIColor, size: CGSize, lineSize: CGSize) -> UIImage { 

    let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height) 
    let rectLine = CGRect(x: 0, y: size.height-lineSize.height, width: lineSize.width, height: lineSize.height) 
    UIGraphicsBeginImageContextWithOptions(size, false, 0) 
    UIColor.clear.setFill() 
    UIRectFill(rect) 
    color.setFill() 
    UIRectFill(rectLine) 
    let image = UIGraphicsGetImageFromCurrentImageContext()! 
    UIGraphicsEndImageContext() 
    return image 
} 
5

-Code für Swift 3

In didFininshLaunch Call-Methode:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 
     UITabBar.appearance().selectionIndicatorImage = getImageWithColorPosition(color: UIColor.blue, size: CGSize(width:(self.window?.frame.size.width)!/4,height: 49), lineSize: CGSize(width:(self.window?.frame.size.width)!/4, height:2)) 
     return true 
    } 

Methode:

func getImageWithColorPosition(color: UIColor, size: CGSize, lineSize: CGSize) -> UIImage { 
     let rect = CGRect(x:0, y: 0, width: size.width, height: size.height) 
     let rectLine = CGRect(x:0, y:size.height-lineSize.height,width: lineSize.width,height: lineSize.height) 
     UIGraphicsBeginImageContextWithOptions(size, false, 0) 
     UIColor.clear.setFill() 
     UIRectFill(rect) 
     color.setFill() 
     UIRectFill(rectLine) 
     let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext() 
     return image 
    }