私は間違っているかもしれませんが、私の意見では、動作は正しいです。topLayout 値は、コンテナー ビュー コントローラーで使用して、そのビューのサブビューをレイアウトできます。
リファレンスには次のように書かれています。
制約を使用せずにトップ レイアウト ガイドを使用するには、含まれているビューの上境界に対するガイドの位置を取得します。
親では、それを含むビューに対して、値は 64 になります。
子では、含まれているビュー (親) に対して、値は 0 になります。
コンテナー View Controller では、次のようにプロパティを使用できます。
- (void) viewWillLayoutSubviews {
CGRect viewBounds = self.view.bounds;
CGFloat topBarOffset = self.topLayoutGuide.length;
for (UIView *view in [self.view subviews]){
view.frame = CGRectMake(viewBounds.origin.x, viewBounds.origin.y+topBarOffset, viewBounds.size.width, viewBounds.size.height-topBarOffset);
}
}
子ビュー コントローラーは、ナビゲーションとステータス バーがあることを知る必要はありません。その親は、それを考慮してサブビューを既にレイアウトしています。
新しいページ ベースのプロジェクトを作成し、それをナビゲーション コントローラーに埋め込み、このコードを親ビュー コントローラーに追加すると、正常に動作しているように見えます。