2017-09-09 5 views
-1

私はViewDidLoadの子ビューコントローラーの中にあるView Controllerを持っています。updateViewConstraintsは、「制約のために用意されていないビュー階層を持つレイアウトを設定することはできません。」

- (void)viewDidLoad { 
    mapVC = [[CollectionMapViewController alloc] init]; 
} 

その後、IBActionメソッドでサブビューとして、このVCを追加します。

- (IBAction)left_seg1:(id)sender {     
      [mapVC layoutMapView]; 
      [self.view addSubview:mapVC.view]; 
      NSLog(@"num 1"); 
      _tagTwo = 3; 
      return; 
} 

私は親ビューに関して、サブビューの制約を作成しようとしています。これを行うために、親クラスにupdateViewConstraintsを追加しました。

- (void)updateViewConstraints{ 
    self.view.translatesAutoresizingMaskIntoConstraints = NO; 
    mapVC.view.translatesAutoresizingMaskIntoConstraints = NO; 

    NSLayoutConstraint* trailConstrain=[NSLayoutConstraint constraintWithItem:mapVC.view attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:10]; 
    NSLayoutConstraint* leadingConstrain=[NSLayoutConstraint constraintWithItem:mapVC.view attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10]; 
    [self.view addConstraints:@[trailConstrain, leadingConstrain]]; 

} 

しかし、これは、以下のランタイム例外発生:

Assertion failure in -[UIView _layoutEngine_didAddLayoutConstraint: 
roundingAdjustment:mutuallyExclusiveConstraints:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.7.47/NSLayoutConstraint_UIKitAdditions.m:649 
    **Impossible to set up layout with view hierarchy unprepared for constraint** 

は、私が他のスレッドを見て、問題は、彼らがviewDidLoadに制約を設定していたということでしたが、私はそれを行っていません。

答えて

0

(1)決して決してviewDidLoadに電話しないでください。電話するのはあなたの方法ではありません。すぐにその行を削除してください。

(2)コードの問題は、いつ呼び出されるか分かりません。あなたのインターフェイスにmapVC.viewがあることを確認するチェックを追加してください。そうでない場合は、そのコードを実行しないでください。

(3)。あなたは、単にビューコントローラのビューを取って、それをあなたのインターフェースに吹き込むことはできません。親View Controllerとして機能する必要があります。あなたはそれをしていない。それは違法です。

+0

ビューが自分のインターフェイスにあるかどうかを特定する方法はありますか?または、私はインスタンス変数に依存しています。例えば、if(_segmentedControl.selectedSegmentIndex == 1) '...また、サブビューを追加するのは違法ですか?どのようにして親ビューコントローラとして機能しないのですか? – Matt

+0

'window'が' nil'の場合、ビューはあなたのインターフェースにありません。 - ここで親ビューコントローラの「ダンス」について説明しました:http://www.apeth.com/iOSBook/ch19.html#_container_view_controllers – matt

関連する問題