iOS : How to add Underline in UITabBarItem

后端 未结 5 1517
情书的邮戳
情书的邮戳 2021-02-09 14:36

I am working in a application where i need to add underline in UITabbarItem.

so i would like to add underline under the selected UITabbarItem i

相关标签:
5条回答
  • 2021-02-09 14:38

    Just Place this code into 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;
    }
    
    0 讨论(0)
  • 2021-02-09 14:42

    Code for Swift 3

    In didFininshLaunch call method:

    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
        }
    

    Method:

    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
        }
    
    0 讨论(0)
  • 2021-02-09 14:52

    Use this code to add a bottom border to any UIView object, just replace view with your UITabbarItem object:

    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 讨论(0)
  • 2021-02-09 14:53

    In the AppDelegate didFininshLaunch Method Add Global Style for 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
    }
    
    0 讨论(0)
  • 2021-02-09 14:57

    Please try this one. I have used in my application once and hope it will help you too.

    This is how I have created Tab bar programmatically:

          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 讨论(0)
提交回复
热议问题