[解決済み] ナビゲーションコントローラーを組み込んだポップオーバーがバックナビのサイズを考慮しない問題
質問
UINavigationControllerをホストするUIPopoverControllerがあり、そこには小さなビューコントローラの階層が含まれています。
ドキュメントに従って、各ビューコントローラのために、ビューのpopover-contextのサイズをこのように設定しました。
[self setContentSizeForViewInPopover:CGSizeMake(320, 500)];
(コントローラごとにサイズが異なります)
これは階層を進むにつれて期待通りに動作します。ポップオーバーは押されたコントローラに対応するために自動的にアニメーションでサイズを変更します。
しかし、ナビゲーション バーの戻るボタンでビュー スタックを "Back" するとき、ポップオーバーはサイズを変更せず、到達した最も深いビューと同じ大きさのままです。私は、ポップオーバーがビュースタックを通じてポップアップするときに設定されたサイズを尊重することを期待しています。
私は何かを見逃しているのでしょうか?
ありがとうございます。
どのように解決するのですか?
私は同じ問題で苦労していました。上記の解決策はどれもうまくいかなかったので、少し調査して、これがどのように機能するかを調べることにしました。
これが私が発見したものです。
-
を設定すると
contentSizeForViewInPopover
を設定した場合、ポップオーバー自身によって変更されることはありません - 別のコントローラに移動する間にポップオーバーのサイズが変更されても。 - 別のコントローラに移動している間にポップオーバーのサイズが変更された場合、戻っている間、ポップオーバーのサイズは復元されません。
- viewWillAppearでポップオーバーのサイズを変更すると、非常に奇妙なアニメーションが表示されます(ポップオーバーの中にpopControllerがあるとします) - お勧めしません。
- 私の場合、コントローラ内でハードコードされたサイズを設定することは全くうまくいきません。私のコントローラは、時には大きく、時には小さくする必要があります。
このような苦痛に対する解決策は、以下のとおりです。
のサイズをリセットする必要があります。
currentSetSizeForPopover
のサイズをリセットする必要があります。しかし、注意しなければならないのは、フィールド
currentSetSizeForPopover
で設定されたものと同じサイズを設定すると、ポップオーバーはサイズを変更しません。そのためには、まず偽のサイズ(前に設定されたものとは異なる)を設定し、次に正しいサイズを設定すればよいのです。この方法は、コントローラがナビゲーションコントローラ内にネストされている場合でも動作し、コントローラ間を移動すると、それに応じてポップオーバーのサイズが変更されます。
以下のヘルパーメソッドで UIViewController のカテゴリを簡単に作成することができ、サイズを設定するトリックを行うことができます。
- (void) forcePopoverSize {
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
そして、単に
-viewDidAppear
で呼び出すだけです。
関連
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] インポート vs #インポート - iOS 7
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[iOS]コンパイルエラー:ld: アーキテクチャ x86_64 のシンボルが見つかりません。
-
iOS classic error Undefined symbols for architecture XXX:
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] Xcodeにおけるバージョンとビルドの比較
-
[解決済み] UIViewに角丸をつける
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み] iOS 13でダークモードをオプトアウトすることは可能ですか?
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] Swiftで配列に要素を追加する