質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

10997閲覧

遷移後、NavigationBarがうまく表示されない

Mark1975

総合スコア7

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/01/17 07:51

編集2020/01/17 08:34

##開発環境
開発環境はXcode Version 11.2 beta (11B41)
Swift version 5.0.1 です。

前提・実現したいこと

Swiftを初めて半年ちょっとの者です。

iOS向けにペット管理(犬)のアプリ開発をしており、Swiftで開発をしています。
今回の画面での使用ライブラリはSegementSlide、Eureka、ImageRow、NCMBです。
メイン画面(ViewA)はTwitterのフォローリスト画面のように登録した犬が上から登録されていき、SegementSlide内のUITableViewControllerによってスクロールできるようになっています。
ViewAにはNavigationBarがあり右上に新しい犬を追加できるように追加ボタンが配置してあります。そこを押すと、犬の新規登録画面(ViewB)に遷移、ViewB内の登録完了ボタンを押すと、登録完了メッセージが出てくる画面(ViewC)に遷移します。ViewC内でボタンを押すとTOP画面(ViewA)に戻るということを実現したいです。

内容を整理すると、
ViewA → ViewB → ViewC → ViewA
となります。また、ViewAからViewB、ViewBからViewCどちらもNavigation Controller管理下にあり、performSegueでwithIdentifierを設定し、遷移しております。

###問題点
ViewCからViewAに戻る際、
####ViewC内で

@IBAction func backToTop(_ sender: Any) { self.navigationController?.popToRootViewController(animated: true) }

でViewAに遷移はできていて、ScrollViewも表示できているのですが、以下の写真の通りNavigationBarのみが表示されなくなってしまいます。

![イメージ説明

ちなみに初期画面(ViewA)は以下のとおりです。

イメージ説明

試したこと

####ViewA画面にて

override func viewDidLoad() { super.viewDidLoad() reloadData() //NavigationBar設定 self.navigationItem.title = "Dogs List" self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "追加", style: .done, target: self, action: #selector(addDogButton)) }    override func viewWillAppear(_ animated: Bool) { self.tabBarController?.tabBar.isHidden = false self.navigationController?.navigationBar.isHidden = false }

上記の通り、
reloadData()
navigationBar.isHidden = false
などで再読み込みとnavigationBarの表示はしております。

初期画面では表示されていたものが、一度離れて元の画面を再表示すると消えてしまうのにはなにか理由がありますでしょうか?
SDKなどのライブラリとの問題なのでしょうか?お詳しい方がいましたらご教授いただけると助かります。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ViewCでNavigationBarを表示しないようにしているのではないでしょうか。その設定が引き継がれてしまうので、ViewAに戻っても表示されていないのかなと想像します。

ViewAのviewWillAppear()self.navigationController?.navigationBar.isHidden = false
としている所を、
navigationController?.setNavigationBarHidden(false, animated: true)
としてみたら、表示されるのではないかと思います。

navigationBarnavigationControllerの管理下にあるので、navigationControllerの方のメソッドで制御するとうまくいくと思います。

投稿2020/01/17 14:52

eytyet

総合スコア803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mark1975

2020/01/17 16:10

解説どおりにしてみたらできました!わかりやすい解説ありがとうございました! VIewCからViewAに遷移したときに、設定が引き継がれているとは知りませんでした…。 navigationControllerについて理解が深まりました。感謝いたします。ありがとうございました!
eytyet

2020/01/17 16:23

動いてよかったです。 ViewA, ViewB, ViewCはいずれも同じナビゲーションコントローラーを使っているので、ナビゲーションバーの表示・非表示の設定はビューコントローラが変わっても生き続けます。ナビゲーションバーのボタンやタイトル等はビューコントローラに合わせて自動的に切り替えてくれますが、それとは違う動作なので分かりにくいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問