2013-09-04 11 views
18

現在、アプリケーションをiOS 7に移行中です(iOS 6と互換性があります)。この質問はApple NDAには含まれていませんが、Auto Layoutに関する質問です(iOS 7は自動レイアウトを強制しているようです(EDIT:間違っていた、強制されていません))。ナビゲーションバーとビューコントローラ(iOS 7)を使用した自動レイアウト

私は、ルートコントローラ(明らかに)を備えたナビゲーションコントローラを持っています。 iOS 6では、私は自動レイアウトを使用していなかったので、ルートビューコントローラはナビゲーションバーの下にありました。 iOS 7では、フレームの原点にナビゲーションバーが含まれていないため、コンテンツの上部が隠されています。

オートレイアウトでナビゲーションバーの上に全体のビューを作成する方法はありますか?

ありがとうございます!

+0

ようなものになることができます。これは、それはiOS7だかいないかどうかを知るのに役立ちます

iOS7で自動レイアウトを使用する開発者は?これは間違いありませんか? (この情報はNDAの対象となる場合があります) – bennythemink

+0

iOS 7では自動レイアウトが強制されません。改善されました。 –

+0

強制されます。彼らは文書で言及しなかった。 viewDidLoadおよびviewDidAppearの前にフレーム値を確認します。私はIBを使用しませんが、それでも値は異なります。これは何を示唆していますか? !! –

答えて

22

iOS 7では、ナビゲーションバーを指定するtopLayoutGuideがあります。次に、tableviewの制約がスーパービューではなくtopLayoutGuide上にあるように指定することができます。

if ([self respondsToSelector:@selector(topLayoutGuide)]) 

だから、それは私が間違っているかもしれないが、Appleは「強制場合、私は驚かれることでしょうその

NSString *verticalConstraint = @"V:|[v]|"; 
NSMutableDictionary *views = [NSMutableDictionary new]; 
views[@"v"] = self.tableview; 
if ([self respondsToSelector:@selector(topLayoutGuide)]) { 
    views[@"topLayoutGuide"] = self.topLayoutGuide; 
    verticalConstraint = @"V:[topLayoutGuide][v]|"; 
} 
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:verticalConstraint options:0 metrics:nil views:views]]; 
[self.view addConstraints:constraints]; 
+1

をios 6でコンパイルするには、self.topLayoutGuideを[self valueForKey:@ "topLayoutGuide"]にする必要があります(iOS 7 GMでテスト済み) –

+0

@kschaeffler @ "V:[topLayoutGuide] [v] | "?私はビジュアルフォーマット言語に関する記事を読むつもりですが、まだ少し混乱しています。私は、VerticalがtopLayoutGuideに関連していると言っていると思うが...編集:* Flash - 電球が消える* Nevermind、私は理解していると思う。 V:では、垂直レイアウトを設定していて、[object1] [object2]は、オブジェクト1と2が互いに向かい合っていると言っています。 |そうです。 – RonLugge

+0

OK、私はそれを自分で考え出したので、簡単な説明を投稿します。「V:」部分はこれを修正して、垂直レイアウトに影響を与えます。 [topLayoutGuide]は、ビューによって提供されるトップレイアウトガイドへの参照として機能し、[v]で表されるサブビューと同じ面に配置されます。閉鎖パイプは、ビューの端がスーパービューの端と同一平面にあることを意味します。一度理解されると、非常に明確で美しいレイアウト言語...最初は理解しにくい。 – RonLugge

関連する問題