2017-09-14 3 views
0

J'ai essayé beaucoup de choses mais impossible de trouver un moyen de mettre l'étiquette d'un UITabBarItem avec un lineNumber customised.0 (je voudrais obtenir le titre sur 2 lignes).Plusieurs lignes dans UITabBarItem Label

Existe-t-il un moyen de le faire?

+1

@ chirag90 Il s'agit d'un titre de barre de navigation, pas le titre d'un bar onglet élément. – the4kman

+0

vous voulez label dans UITabBarItem cela signifie que vous voulez aussi son événement tactile (je suppose)? alors vous pouvez directement utiliser UIButton avec plusieurs lignes. –

+0

L '"étiquette de titre" n'est pas exposée ... Vous aurez certainement besoin d'utiliser une barre d'onglets personnalisée. – DonMag

Répondre

2

Maintenant, il contient deux sous-vues. A 0 c'est imageView et à 1 c'est label. Maintenant, faites en sorte que la hauteur de l'image soit un peu plus petite afin de pouvoir donner à la hauteur de l'étiquette un peu plus de place pour avoir plusieurs lignes. Réglez la propriété du nombre d'étiquettes sur 0 par code.

 let viewTabBar = tabBarItem.value(forKey: "view") as? UIView 
    let imageView = viewTabBar?.subviews[0] as? UIImageView 
    let label = viewTabBar?.subviews[1] as? UILabel 

et jouez maintenant avec cette étiquette.

+1

Vous devriez obtenir une médaille pour cela;) Je suis sûr que votre réponse aidera des tonnes de gens! –

+0

hey merci l'homme ..... son se sent bien pour répondre à ce genre de questions – Arnav

+1

note que si vous n'avez pas d'image, l'indice de UILabel sera 0, j'ai posté une solution plus générique ci-dessous – eXhausted

0

vous ne pouvez pas faire cela avec UIBarButtonItem car il n'a pas la propriété titleView comme UINavigationItem!

Vous ne pouvez définir qu'une chaîne comme titre et comme image d'onglet! c'est tout!

Si vous avez la possibilité de définir l'étiquette comme titleview de tabbar, alors vous pouvez prendre l'étiquette avec numberofline 0 mais ici vous ne pouvez définir que la chaîne!

1

solution plus stable:

guard let view = tabBarItem?.value(forKey: "view") as? UIView, 
     let label = (view.subviews.flatMap{ $0 as? UILabel }).first, 
     let imageView = (view.subviews.flatMap{ $0 as? UIImageView }).first else { return }