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

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

ただいまの
回答率

87.34%

【Swift】設定画面に遷移して戻ってくるとスクロールビューがずれてしまう

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 715

score 62

ScrollViewは全画面表示しています。
中身もそれぞれスクリーンサイズです。
問題はポップアップでiPhoneの設定画面に1度飛んでからまたアプリに戻って来ると、
おそらくタブバーの高さ分上にズレてスクロールされてしまいます。

iPhoneの設定画面に飛ばない場合は綺麗にTikTokのようにスクリーンサイズでスクロールされます。

画像下の部分がタブバーの上部に来てしまっている。
本来はスクリーンの下に来ているので青い部分は見えない。
イメージ説明

イメージ説明
イメージ説明

スクロールビューのコンテンツを用意しているコード

func setupFirebase() {

        let communityXib = UINib(nibName: "CommunityTableViewCell", bundle: Bundle(for: type(of: self)))

        // 描画開始の x,y 位置
        let px:CGFloat = 0.0
        var py:CGFloat = 0.0

        var counter = 1

        db.collection("communities").getDocuments() { (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
                KRProgressHUD.dismiss()// ローディング終了
                return
            }
            guard querySnapshot!.documents.count > 0 else {
                KRProgressHUD.dismiss()// ローディング終了
                return
            }

            for document in querySnapshot!.documents {
                print("\(document.documentID) => \(document.data())")
                let communityView = communityXib.instantiate(withOwner: self, options: nil).first as! UIView
                communityView.isUserInteractionEnabled = true

                let community = document.data()
                let documentId = document.documentID

                // コミュニティー名設定
                let titleLabel = communityView.viewWithTag(1) as! UILabel
                let title = community["name"] as! String
                titleLabel.textColor = UIColor.white
                titleLabel.text = String(describing: title)
                // コミュニティー画像設定
                let img  = communityView.viewWithTag(2) as! UIImageView


                let storageRef = self.storage.reference()
                let imgRef: StorageReference!
                // 新機種 レスポンシブ
                if UIScreen.main.nativeBounds.height == 2436 || UIScreen.main.nativeBounds.height == 2688 || UIScreen.main.nativeBounds.height == 1792 {
                    imgRef = storageRef.child("communities").child(community["imgX"] as! String)
                }  else {
                    imgRef = storageRef.child("communities").child(community["img8"] as! String)
                }
                img.sd_setImage(with: imgRef)
                img.isUserInteractionEnabled = true
                img.frame.size.height = UIScreen.main.bounds.height

                let gesture = MyTapGestureRecognizer(target: self, action: #selector(ScrollViewController.btnClick(_:)))
                gesture.targetString = documentId
                gesture.targetData = community
                communityView.addGestureRecognizer(gesture)
                communityView.tag = 1
                self.scrollView.addSubview(communityView)

                // 描画開始設定
                var viewFrame:CGRect = communityView.frame
                viewFrame.size.width = self.scrollScreenWidth
                viewFrame.size.height = self.scrollScreenHeight
                viewFrame.origin = CGPoint(x: px, y: py)
                communityView.frame = viewFrame

                // 次の描画位置設定
                py += (self.screenSize.height)
                counter += 1

                var appGuideViewFrame:CGRect = self.appGuideView.frame
                appGuideViewFrame.size.width = self.scrollScreenWidth
                appGuideViewFrame.size.height = self.scrollScreenHeight
                appGuideViewFrame.origin = CGPoint(x: px, y: py)
                self.appGuideView.frame = appGuideViewFrame

                // スクロール範囲の設定
                let nHeight:CGFloat = self.scrollScreenHeight * CGFloat(counter)
                self.scrollView.contentSize = CGSize(width: self.scrollScreenWidth, height: nHeight)

            }
            KRProgressHUD.dismiss()// ローディング終了

        }

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

isHiddenが原因だったみたいですが、なぜバックグラウンド状態から戻って来た際に発生するのかは不明です。
対処としては消さずに遷移先で透明にしました。

    override func viewWillAppear(_ animated: Bool) {
        super.viewDidDisappear(animated)

        let InfoVc = self.presentingViewController as! RootTabBarController
        InfoVc.tabBar.alpha = 0
        InfoVc.tabBar.isTranslucent = false
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        let InfoVc = self.presentingViewController as! RootTabBarController
        InfoVc.tabBar.alpha = 1
        InfoVc.tabBar.isTranslucent = true
    }

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る