iOS:如何在UITabBarItem中添加下划线

我正在一个应用程序,我需要在UITabbarItem添加下划线。

所以我想在iOS的默认UITabbarcontroller UITabbarItem中的所选UITabbarItem下添加下划线。

我已经创build了UITabbarcontroller子类,但没有find任何方法来添加行。

我想做一些像下面的图像。

UITabbarWithUnderline图像

如果有人有任何想法,请在这里分享。

请试试这个。 我已经在我的应用程序中使用过一次,希望它也能帮助你。

这是我如何以编程方式创build选项卡栏:

  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; } 

代码为Swift 3

在didFininshLaunch调用方法中:

 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 } 

方法:

 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 } 

只需将此代码放入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; } 

在AppDelegate didFininshLaunch方法中为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 } 

编辑斯威夫特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 } 

使用此代码将底部边框添加到任何UIView对象,只需用您的UITabbarItem对象replaceview

 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];