私は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
に制約を設定していたということでしたが、私はそれを行っていません。
ビューが自分のインターフェイスにあるかどうかを特定する方法はありますか?または、私はインスタンス変数に依存しています。例えば、if(_segmentedControl.selectedSegmentIndex == 1) '...また、サブビューを追加するのは違法ですか?どのようにして親ビューコントローラとして機能しないのですか? – Matt
'window'が' nil'の場合、ビューはあなたのインターフェースにありません。 - ここで親ビューコントローラの「ダンス」について説明しました:http://www.apeth.com/iOSBook/ch19.html#_container_view_controllers – matt