4

私は、タブバーコントローラに接続されているナビゲーションコントローラにタブバーのアイテムを持っていると私は迅速ナビゲーションコントローラとタブバー項目のタイトルを非表示にする方法

タブバーコントローラ>ナビゲーションコントローラでタイトルを削除したいです>ビューコントローラ

Tab Bar Item

Flow of the program

アプリケーションでは、と私は意味これらのタブのそれぞれが正常に動作している5つのタブとタブバーコントローラで始まりますタブバー項目の下のタイトルを隠すが、画像のタブは隠されたとするアプリケーションも大丈夫、このタブに取り組んでいることをユーザがログアウトした場合や、画像内のViewControllerが表示されているされていないのが、もし問題を抱えていますユーザーはタブバーのタイトルにサインインしているので、離れているとプログラムでタイトルを隠すことができます

答えて

3

Xcodeあなたのストーリーボードに行き、その後アイコンが設定されているナビゲーションコントローラをクリックします。 navigationControllerの下部にあるtabBarItemをクリックします。左側で、属性インスペクタに行き、barItemタイトルを消去します。

また、あなたのストーリーボードが異なるままにもかかわらず、プログラムでこれを行うことができます。

let items = self.tabBarController?.tabBar.items 
let tabItem = items![2] 
tabItem.title = "" 
+0

ありがとう、私はすでにそれを行った、それは動作していない UITabBarControllerからタイトルを隠すには? – SALEH

+0

さて、xcodeトリックはうまくいっているはずです。アイテムの下に表示されるテキストを設定するだけです。非表示にして再び表示させる場合は、プログラムコードを使用する必要があります。 – caiomcg

+0

前のコードはどこに追加できますか? – SALEH

2

タブは、タブのルート・ビュー・コントローラのタイトルによってオーバーライドさUITabBarItemのタイトル、で構成することができます。あなたはBookingViewControllerにtitle = "Booking"を設定していると思います。

あり、明示的にタブのタイトルを非表示にするには、私の知っている何のAPIはありませんが、あなたは基本的に画面を離れてそれらを移動することによって、それらを隠すことができます。

let tabBarTitleOffset = UIOffsetMake(0,50) 
for controller in tabBarController.viewControllers? { 
    controller.tabBarItem.titlePositionAdjustment = tabBarTitleOffset 
} 

次に、あなたのアイコンはあなたにも調整することができ、少し高く表示される場合がありますtabBarItem.imageInsetsを設定して補正します。

+0

ありがとうございます。オーバーライドについてのアイデアのおかげで、私はviewControllerのタイトルがナビゲーションバーに表示されています。 – SALEH

0

あなたはこれを試すことができます。

あなたは私はこのようなtitleを設定制限UITabBarItemのサブクラスを作成したいタイトル

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    self.tabBarController?.title = "" 
    } 
1

をたくないビューコントローラでこれを追加します。

final class MyTabBarItem: UITabBarItem { 

    override var title: String? { 
     get { return nil } 
     set { super.title = title } 
    } 

    override var imageInsets: UIEdgeInsets { 
     get { return UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0) } 
     set { super.imageInsets = imageInsets } 
    } 

    convenience init(image: UIImage? , selectedImage: UIImage?) { 
     self.init() 

     self.image = image 
     self.selectedImage = image 
    } 

    override init() { 
     super.init() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

次に使用して、View ControllerのtabBarItemを初期化しますカスタムクラス:

tabBarItem = MyTabBarItem(image: UIImage(named: "my_img"), selectedImage: nil) 
0

は、私は最近、この質問に出くわしたと私はそのかなり軽量だと思いますし、いくつかはそれを好むかもしれないと私は、後世のために、私自身の解決策を投稿しようと思いました。

まず、しかし、あなたのタブ項目を(私は私がに私の子供のコントローラを渡すUITabBarControllerサブクラスである)を作成する - 空の文字列にタブ項目のタイトルを設定します。

(もちろん、このソリューションは、比較的一般的な、埋め込みナビコントローラを備えたタブバーコントローラがあるOPシナリオに固有です)。

おそらく知っているように、UIViewControllerのタイトルを設定すると、関連するタブ項目にタイトルが表示されます。

タブ項目タイトルを設定せずにUIViewControllerタイトルを作成するには、新しいUILabelをビューコントローラのナビゲーション項目に追加します。タイトル表示

私はそうのようなのUIViewControllerの拡張を作成巻き上げ:あなたが好きしかし

extension UIViewController { 

    func addNavItemTitle(resourceString: String, textColor: UIColor = UIColor.white) { 
     // Add title view ~ allows overriding title w/out showing it on tabBarItem 
     let titleLabel = UILabel() 
     titleLabel.text = NSLocalizedString(resourceString) 
     titleLabel.textColor = textColor 
     titleLabel.font = UIFont.viewTitle 
     titleLabel.sizeToFit() 

     self.navigationItem.titleView = titleLabel 
    } 
} 

はあなたのフォントや色をカスタマイズします。ラベルサイズ自体を測定したり、フレームを設定したりする必要はありません。

また、ローカライズされた文字列と文字列を直接設定する方が好きです。任意のタブの子コントローラで今すぐ

、タブ項目のタイトルを拾っていない間、私のビューコントローラのタイトルを設定するために - 私はちょうど良い場所は、あなたが持っているかもしれviewDidLoad

であるaddNavItemTitle(resourceString: "example.title")

を呼び出しますNSLocalizedStringへの私の呼び出しに引数がないことにも気づいた。これは、リソース文字列と同じ文字列をコメントに使用する傾向があるためです。そこで、文字列を繰り返さずに呼び出しを単純化するグローバル関数を作成しました。そのよう

public func NSLocalizedString(_ key: String) -> String { 
    return NSLocalizedString(key, comment: key) 
} 
2

他の人が示唆したように、あなたはどちらかにInterface Builderに移動して、バーの項目にタイトルを消去したり、プログラム的にそれを行うことができます。

タブにリンクするUIViewControllerのtitleプロパティを設定しない限り、これで十分です。ビューコントローラのタイトルを設定して、バーアイテムのタイトルとして表示しないようにするには、title = "My Title"の代わりにnavigationItem.title = "My Title"を使用します。

関連する問題