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

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

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

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

Swift

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

Q&A

解決済

1回答

1555閲覧

CGAffineTransformで移動させたtableViewが初期位置からズレてしまいます。

Haruto513

総合スコア52

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/07/05 02:04

Swiftはまだまだ初心者です。
テーブルビューを画面最下辺までを範囲として配置しており、カスタムセルにテキストフィールドを置いています。
一番下の行のテキストフィールドを選択したときに、テキストフィールドがキーボードに隠れるのを防ぐために以下のような処理を書きました。

swift

1 2override func viewWillAppear(_ animated: Bool) { 3 super.viewWillAppear(animated) 4 let notification = NotificationCenter.default 5 notification.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil) 6 notification.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil) 7 8} 9 10@objc praivete func keyboardWillShow(notification: Notification) { 11 if TableView.indexPathForSelectedRow != nil { 12 if TableView.indexPathForSelectedRow!.row >= Data.count - 5 { 13 let rect = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as AnyObject).cgRectValue 14 let duration: TimeInterval = notification.userInfo![UIResponder.keyboardAnimationDurationUserInfoKey] as! Double 15 TableView.setContentOffset(CGPoint(x: 0, y: ((rect?.size.height)!)), animaeted: true) 16 UIView.animated(withDuration: duration, animation: { () in 17 let transform = CGAffineTransform(translationX: 0, y:-(rect?.size.height)!) 18 self.TableView.transform = transform 19 }) 20 } 21 } 22} 23 24@objc private func keyboardwillHide(notification: Notification) { 25 if TableView.indexPathForSelectedRow != nil { 26 if TableView.indexPathForSelectedRow!.row >= Data.count - 5 { 27 let duration: TimeInterval = notification.userInfo![UIResponder.keyboardAnimationDurationUserInfoKey] as! Double 28 UIView.animated(withDuration: duration, animation: { () in 29 self.TableView.transform = CGAffineTransform.identity 30 }) 31 } 32 } 33} 34

このように書くと、テーブルビューのカスタムヘッダーの位置が、少し下がって表示されました。テーブルビューのセルが表示される個所は元に戻っているため、ヘッダーの少し上に、はみ出すようにテーブルビューセルが表示されてしまいます。
イメージはこんな感じです。

初期状態

             ↓

移動が終わった後

何故、ヘッダーだけがずれて表示されるのか、元に戻す方法にはどんなのがあるのか、ご教示頂けると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

何故、ヘッダーだけがずれて表示されるのか、元に戻す方法にはどんなのがあるのか、ご教示頂けると幸いです。

再現するプロジェクトをアップしてもらわないと検証できませんので、その質問の回答はし辛いです。

キーボードが出てきた時の処理は、transformではなくテーブルビューのcontentInset&scrollIndicatorInsetsを調節し、スクロール自体はscrollToRowAtIndexPathを使うと良いです。

参考:
https://stackoverflow.com/questions/24529373/tableview-scroll-content-when-keyboard-shows

投稿2019/07/05 02:33

takabosoft

総合スコア8356

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

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

Haruto513

2019/07/05 07:45

解答ありがとうございました。 参考になる知識やリンクも、教えてくださり感謝です。 そして、ただいま実機で確認したところ、そちらでは問題なくテーブルビューもヘッダーも元の位置に戻りました。 シミュレーターと実機での挙動の違いはよく分かりませんが、今回はこれで解決ということにさせていただきます。 教えて頂いた情報は今後のさらなる学習の参考にさせていただきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問