2016-08-21 8 views
1

この質問に対して:How to change Back button text from within the child view controller?私は、戻るボタンのタイトルをpreviousViewController.navigationItem.backBarButtonItem?.title = "New Title"に変更した後、ナビゲーションバーを更新するための適切な方法を探しています。UINavigationBarを適切に更新する方法は?

リンク質問から(そう理想的ではない?)解決策:

if let navigationController = self.navigationController { 
    navigationController.popViewControllerAnimated(false) 
    navigationController.pushViewController(self, animated: false) 
} 

を編集:

はどうやら層フレームを変更するとリフレッシュするナビゲーションバーを強制します。ないソリューションが、私は推測する安価な回避策(?):

if let navigationController = self.navigationController { 
    navigationController.navigationBar.layer.frame.insetInPlace(dx: 0.1, dy: 0) 
    navigationController.navigationBar.layer.frame.insetInPlace(dx: -0.1, dy: 0) 
} 
+0

多くの場合、あなたがしたいことを真っ直ぐなやり方で行なわなければ、正当な理由があります。戻るボタンをクリックすると、ユーザーはどこから来たのかがわかり、ナビゲーション履歴を書き換えないようにする必要があります。その左上隅に他の種類の動作(後方をナビゲートする以外の動作)が必要な場合は、 'backBarButtonItem'を使用する必要はありません。 – nhgrif

+0

特定の状況では、タイトルを変更するとユーザーエクスペリエンスが向上します。 WhatsAppを例に取る。 – MJQZ1347

+0

私はWhatsAppを使ったことがないと仮定します。 – nhgrif

答えて

0

一つの解決策は、除去/バックボタンを非表示にし、その中にカスタムUIBarButtonItemを示すことによって、完全にUIBarButtonItemを変更する機能を持っているだろうnavigationItem.leftBarButtonItemプロパティで配置します。確かに理想的ではありませんが、このボタンは中期的なVCライフサイクルに変更されることはありませんので、試してみてください。その意味では、これは標準的な行動とは見なされないため、「適切な」方法はありません。私はサンプルビューコントローラ上のボタンにこの機能を追加したとき

は、それは私のために働い:

func changeBackButton() { 
    navigationItem.hidesBackButton = true 
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Test", style: .plain, target: self, action: #selector(test)) 
} 
+0

しかし、後ろの矢はどうですか?それは欠けている? – MJQZ1347

+0

@ MJQZ1347タイトルに "<"を追加してフォントを再生しますか?または、これをチェックしてください:http://stackoverflow.com/a/18874211/6597361どちらの方法でも、あなたの状況から非常に簡単な方法です。 – tech4242

+0

残念ながら、スワイプが戻ってきても、その回避策ではうまくいきません。また、VCをポップすることなくナビゲーションバーを更新する簡単な方法が必要ですか? – MJQZ1347

3

をリフレッシュするためにさまざまな方法を試した後、私はこれが(で動作するようです少なくとも醜いソリューションです見つけます試み

guard let navigation = navigationController, 
     !(navigation.topViewController === self) else { 
    return 
} 
let bar = navigation.navigationBar 
bar.setNeedsLayout() 
bar.layoutIfNeeded() 
bar.setNeedsDisplay() 

他の方法:ビューコントローラ(原因を提示

  • IOSの10)に少なくともバーのレイヤーのフレームを設定するいくつかのケースで点滅する画面)
  • 非表示と再表示バー(ハーフウェイ前のVCにbackswipe間の場合ブレークがバー)
  • は(確実に動作するようには思えない、と明示的に禁止されていますnavigationBarのドキュメントで)
関連する問題