2013-07-25 22 views
7
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    ChildViewController *childviewcontroller = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil]; 


    [self addChildViewController:childviewcontroller]; 
    [self.view addSubview:childviewcontroller.view]; 
    [childviewcontroller willMoveToParentViewController:self]; 
    UIView *cview = [[UIView alloc] init]; 
    cview = childviewcontroller.view; 
    [self.view removeConstraints:self.view.constraints]; 

    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(cview); 
    [self.view addConstraints:[NSLayoutConstraint 
           constraintsWithVisualFormat:@"H:|-[cview]-|" 
                options:0 metrics:nil           
                views:viewsDictionary]]; 

} 

親ビューよりchildviewcontrollerビューを追加したいと思います。追加した後、私は制約を設定しましたが、それは私のために働いていません。子ビューコントローラのビューを親ビューに追加する方法

私もこの

2013-07-25 10:47:30.564 neenah[1105:c07] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't 
    understand, refer to the documentation for the UIView 
    property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x9256c90 H:|-(NSSpace(20))-[UIView:0x9256a00] (Names: '|':UIView:0x92557a0)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x755d690 h=--& v=--& H:[UIView:0x9256a00(320)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x755d5a0 h=--& v=--& UIView:0x9256a00.midX == + 160>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x9256c90 H:|-(NSSpace(20))-[UIView:0x9256a00] (Names: '|':UIView:0x92557a0)> 

Break on objc_exception_throw to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
2013-07-25 10:47:30.567 neenah[1105:c07] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x9256bb0 H:[UIView:0x9256a00]-(NSSpace(20))-| (Names: '|':UIView:0x92557a0)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7561690 h=--- v=--- H:[UIWindow:0x92527c0(320)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x755fe50 h=-&- v=-&- UIView:0x92557a0.width == UIWindow:0x92527c0.width>", 
    "<NSAutoresizingMaskLayoutConstraint:0x755d690 h=--& v=--& H:[UIView:0x9256a00(320)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x755d5a0 h=--& v=--& UIView:0x9256a00.midX == + 160>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x9256bb0 H:[UIView:0x9256a00]-(NSSpace(20))-| (Names: '|':UIView:0x92557a0)> 

Break on objc_exception_throw to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
+0

あなたはちょうどそのため、このライン必要[self.viewのaddSubviewを:childviewcontroller.view]; –

+0

私は2行目でそれを行いました。問題は私の制約がここでは働いていないことです。 @Puneet –

+0

@DhiyanesKaeYesこのためにautolayoutを使用する場合は、(a)@ "V:| - [cview] - |"制約のセット。 (b)おそらく 'cview.translatesAutosizingMaskIntoConstraints = NO'が必要になるでしょう。 – Rob

答えて

13

のような警告をいくつかの観察取得しています:あなたはあまりにも、垂直方向の制約を定義する必要があり

childviewcontroller.view.translatesAutoresizingMaskIntoConstraints = NO; 
    1. あなたはtranslatesAutoresizingMaskIntoConstraintsをオフにする必要がありますが:

      [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[cview]-|" 
                          options:0 
                          metrics:nil           
                          views:viewsDictionary]]; 
      
    2. 問題に関係なく、cviewには[[UIView alloc] init]を作成する必要はありません。あなたはすぐにそれを捨てています。

    3. self.viewの制約を削除する理由がわかりません。 (私はあなたのテストであなたの髪を引き裂いていたと思っています。)あなたはそれをする必要はありません。しかし、ここに何か他のことが起こっていたら、それをする必要があると思ったのですが、それが何であるか教えてください。

    4. 子コントローラを追加するときは、willMoveToParentViewControllerではなくdidMoveToParentViewControllerを呼び出します。 addChildViewControllerwillMoveToParentViewControllerです。 didMove...レンディションだけが必要です。したがって

    - (void)viewDidLoad { 
        [super viewDidLoad]; 
    
        // instantiate the view controller 
    
        ChildViewController *childViewController = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil]; 
    
        // or you can instantiate using storyboard 
        // 
        // ChildViewController *child = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildIdentifier"]; 
    
        // now do the view controller containment calls to update the view controller hierarchy and add the view as appropriate 
    
        [self addChildViewController:childViewController]; 
        childViewController.view.translatesAutoresizingMaskIntoConstraints = NO; 
        [self.view addSubview:childViewController.view]; 
        [childViewController didMoveToParentViewController:self]; 
        UIView *childView = childViewController.view; 
    
        NSDictionary *views = NSDictionaryOfVariableBindings(childView); 
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[childView]-|" options:0 metrics:nil views:views]]; 
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[childView]-|" options:0 metrics:nil views:views]]; 
    } 
    
  • +1

    yurの応答に感謝し、今私はこの概念を学んでいるthatsなぜ私は困っている。 @ RoP –

    +0

    これは、nibファイルを持つView Controllerをここにロードしたときに私のために働いていました。それはストーリーボードからのものでした。 instantiateViewControllerWithIdentifierが動作しませんでした。子コンテナは親ビューでも制約にも反応しませんでした。 – hasan83

    +0

    @ hasan83 - 'instantiateViewControllerWithIdentifier'を使うと、プロセスは同じです。私はちょうどそれをテストし、それは正常に動作します。私はあなたが適切に定義されていないいくつかの制約があることを賭けるだろう。それでも問題の原因が見つからない場合は、問題の[再現可能な例](http://stackoverflow.com/help/mcve)で独自の質問を投稿してください。 – Rob

    関連する問題