現在、iOS 7でアプリを移行していますが、新しいnavigationcontroller/bar管理で何時間もスタックしています。
以前、Navigation Controllerがあるとき、次のようなスニペットがありました:
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
インターフェイスビルダーでは、ビューの既存のナビゲーションバーを設定するオプションがあり、すべてが実際のビューのコンテンツと一致します。
わかりましたので、今、私はインターフェイスビルダーで適切に設計する方法の手がかりがありません。 navcontrollerを初期化するためのスニペットがまだあります。ただし、MainViewControllerのインターフェイスビルダーで、ステータスバーを半透明または不透明のナビゲーションバーに設定すると、上部に44pxのオフセットがあります(以下を参照)。
Interface Builder_________________________そして結果
今、ステータスバーをなしに設定すると、上部にオフセットはありませんが、ナビゲーションバーのためにシミュレータ上のビューが小さくなるため、インターフェイスビルダーのビューの下部が切り取られます。
インターフェースビルダー_________________________そして結果
私は本当にここに何かが欠けていると思いますが、iOS7 Transitions Guideでそれに関するトピックやApple情報を見つけることができません。
ご協力いただきありがとうございます
編集
写真でわかるように、ビューの最初の子は両方のラベルを含むUIScrollViewであり、スクロールビューがない場合は問題は発生しません。 UITableViewの場合にも表示されます。ラベルがUIScrollViewの外側にある場合、そのラベルへのオフセットはありません。
わかりましたので、私は解決策を見つけました、私は自分のコントローラーにプロパティを設定しました:
self.automaticallyAdjustsScrollViewInsets = false
しかし、このプロパティの真の利点を本当に理解していません(またはデフォルト値がtrueである理由)
私が見つけた唯一のドキュメントはそこにありました:
更新
IOS 11ではautomaticallyAdjustsScrollViewInsets
は非推奨です
次を使用する必要があります。
self.tableView.contentInsetAdjustmentBehavior = .never
また、 この質問 とその回答を確認して、これらのプロパティをよりよく理解することをお勧めします
@Justafingerの答えは、私にとっても魅力的なものでした。
この設定は、インターフェイスビルダーからも簡単に調整できることを付け加えたかっただけです。
私はこれと同じ問題に直面していましたが、インターフェイスビルダーのViewControllerでかなり奇妙なプロパティが見つかりました。 「エッジの拡張」チェックボックスのセットがあります。 「Under Top Bars」チェックを削除すると、すべてが適切にレイアウトされ始めました。
同様の問題がありました。viewControllerを閉じた後、tableViewのcontentOffsetが(0、-64)に変更されました。
私の解決策は少し奇妙で、他のすべての答えを試しましたが、成功しませんでした。私の問題を解決した唯一のことは、.xibのコントロールツリーでtableViewの位置を切り替えることでした
これは、次のような親ビューの最初のコントロールでした:
ImageViewの直後にtableViewを移動し、動作しました:
テーブルビューを最初の位置に置くことが問題の原因であり、テーブルビューを別の位置に移動すると問題が解決したようです。
P.D. autoLayoutもストーリーボードも使用していません
これが誰かを助けることを願っています!
AutomaticAdjustsScrollViewInsetsをYES(デフォルト設定)に設定すると、ios6とios7のスクロールビューの位置に不一致が生じるため、一貫性を保つためにこの設定を無効にする必要があります。ただし、ios6は、自動的にAdjustsScrollViewInsetsに遭遇するとクラッシュします。そのため、ios7で条件付きでautomaticAdjustsScrollViewInsetsをプログラムで変更するか、ストーリーボード/ NIBを使用してオプションをオフにする必要があります。
ソリューションの回避策は、ストーリーボードファイルを「iOS 6.1以前」として表示することです(ストーリーボードファイル->ファイルインスペクター-> Interface Builderドキュメント->表示形式を選択します。このモードでサブビューを配置すると、オフセットが表示されます。
解決策をありがとう!私は問題を解決しようとして何時間も苦労しました。ナビゲーションバーが含まれていなかった場合はすべて問題ありませんでしたが、NavigationControllerにViewControllerを埋め込んだ瞬間に問題が生じました。
スクロールビューインセットの調整およびトップバーの下のチェックを外して解決しました。これらは両方とも、ViewControllerの属性インスペクターにあります。感謝万円!