2015-09-19 6 views
5

私はUITabbarItemに下線を付ける必要があるアプリケーションで作業しています。iOS:UITabBarItemに下線を追加するには

このように、iOSのデフォルトUITabbarcontrollerにあるUITabbarItemの下に下線を追加したいと思います。

私はすでにUITabbarcontrollerのサブクラスを作成しましたが、その行を追加する方法が見つかりませんでした。

以下のような画像を作成したいと思います。

UITabbarWithUnderline Image

これは、ここで共有してくださいするために、誰もが任意のアイデアを持っている場合。

答えて

9

、このいずれかを試してみてください。 私は一度私のアプリケーションで使用して、それもあなたを助けることを願っています。

 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

このコードはipadでも使えました...(y) –

-1

は自分UITabbarItemオブジェクトにviewを置き換え、どのUIViewオブジェクトに下の境界を追加するには、このコードを使用します。

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

あなたは、このソリューションを自分でチェックしましたか? 'UITabBarItem'は' UIView'から継承せず、 'layer'プロパティもありません。 – Eimantas

4

ちょうど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
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 
} 

EDITスウィフト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

スウィフト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 
    } 
関連する問題