[解決済み] iOS11でuitableviewが変な挙動をする。ナビゲーションプッシュアニメーションでセルがスクロールアップする
質問
最近、いくつかのコードを新しい iOS 11 beta 5 SDK に移行しました。
私は今、UITableViewから非常に混乱した挙動を得ます。テーブルビュー自体はそれほど派手ではありません。私はカスタムセルを持ちますが、ほとんどの場合、それは高さのためだけです。
テーブルビューでビューコントローラをプッシュすると、プッシュ/ポップナビゲーションアニメーションに沿って、セルが "スクロールアップ"(またはおそらくテーブルビューフレーム全体が変化する)およびダウンする追加アニメーションが表示されます。gifを参照してください。
私は手動で
tableview
で
loadView
メソッドを使用して、テーブルビューのスーパービューの先頭、末尾、上、下と同じになるように自動レイアウト制約を設定します。スーパービューとは、ビューコントローラのルートビューのことです。
ビューコントローラのプッシングコードは非常に標準的なものです。
self.navigationController?.pushViewController(notifVC, animated: true)
同じコードでiOS 10では正常な動作が得られます。
何が間違っているのか、方向性を示していただけないでしょうか。
EDIT: 非常にシンプルなテーブルビューコントローラを作成し、そこで同じ挙動を再現することができました。コードです。
class VerySimpleTableViewController : UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = String(indexPath.row)
cell.accessoryType = .disclosureIndicator
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let vc = VerySimpleTableViewController.init(style: .grouped)
self.navigationController?.pushViewController(vc, animated: true)
}
}
EDIT 2: UINavigationBarのカスタマイズに問題があることを突き止めました。私はこのようにカスタマイズしています。
rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)
ここで
createFilledImage
は、指定されたサイズと色で正方形の画像を作成する。
この行をコメントアウトすると、通常の動作に戻ります。
この件に関して何かご意見がありましたらお願いします。
どのように解決するのですか?
この原因は
UIScrollView's
(UITableViewはUIScrollviewのサブクラスです)
新しい
contentInsetAdjustmentBehavior
プロパティが設定され
.automatic
に設定されています。
影響を受けるコントローラの viewDidLoad において、以下のスニペットでこの動作をオーバーライドすることができます。
tableView.contentInsetAdjustmentBehavior = .never
https://developer.apple.com/documentation/uikit/uiscrollview/2902261-contentinsetadjustmentbehavior
関連
-
iOS classic error Undefined symbols for architecture XXX:
-
[解決済み] Xcode 6のバグ:Interface Builderファイル内の不明なクラス
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] SwiftでURLから画像を読み込む/ダウンロードする
-
[解決済み] CocoaPodsの最新バージョンにアップデートしますか?
-
[解決済み] UIImageのサイズを変更する最も簡単な方法?
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] iPhoneでナビゲーションバーを1ページ目だけ非表示にする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
libc++abi.dylib が NSException 型の捕捉できない例外で終了する理由 エラー
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] SwiftでUIAlertViewを作成するにはどうしたらいいですか?
-
[解決済み] iOSシミュレータでスクリーンショットを撮る
-
[解決済み] iOS 13でダークモードをオプトアウトすることは可能ですか?
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] 16進カラーバリューの使用方法
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み】iOS7でのautomaticallyAdjustsScrollViewInsets、extendedLayoutIncludesOpaqueBars、edgesForExtendedLayoutの違いについて説明する。