2013-07-25 3 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]]; 

} 

Ebeveyn görünümünden childviewcontroller görünümü eklemek istiyorum. Ekledikten sonra kısıtlamayı ayarladım ama benim için çalışmıyor. BuAna görünümde alt görünüm denetleyicinin görünümü nasıl eklenir

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

Sadece bunun için bu hat istiyorum [self.view addSubview: childviewcontroller.view]; –

+0

İkinci hattımda yaptım, benim sorunum benim kısıtımın burada çalışmadığı. @Puneet –

+0

@DhiyanesKaeYes Bunun için autolayout kullanacaksanız, (a) @ "V: | - [cview] - |" eksiksiniz kısıtlamalar kümesi; ve (b) büyük olasılıkla "cview.translatesAutosizingMaskIntoConstraints = NO" 'u isteyebilirsiniz. – Rob

cevap

13

gibi

Ben de alıyorum uyarılar Birkaç gözlemler:

  1. Sen translatesAutoresizingMaskIntoConstraints kapatmak olmalıdır:

    childviewcontroller.view.translatesAutoresizingMaskIntoConstraints = NO; 
    
  2. Dikey kısıtlamalar tanımlamak gerekir, çok :

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[cview]-|" 
                        options:0 
                        metrics:nil           
                        views:viewsDictionary]]; 
    
  3. Sorununuzla ilgisi olmadığı için,için [[UIView alloc] init]'u oluşturmanız gerekmez. Hemen atıyorsun.

  4. Neden self.view için kısıtlamaları kaldırdığınızdan emin değilim. (Saçını test ettiğin gibi yırttığın gibi yaptığını sanıyorum.) Bunu yapmak zorunda değilsin. Fakat burada devam eden başka bir şeyiniz varsa, bunu yapmanız gerektiğini düşündünüz, bunun ne olduğunu bize bildirin.

  5. Bir alt denetleyici eklerken , willMoveToParentViewController numaralı telefonu arayın. addChildViewController sizin için willMoveToParentViewController'u arar. Sadece didMove... yorumlamasına ihtiyacınız var. Böylece

:

- (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 tepkiniz için teşekkürler ve şimdi sadece bu kavramları öğreniyorum ki neden başım belada. @Rob –

+0

Görünüm denetleyicisini nib dosyasıyla birlikte yüklediğimde benim için çalıştı. ama hikaye tahtasından geldiğinde. Anında çalışmadıUpiControllerWithIdentifier. Çocuk konteynırı, ebeveyn görüşüne hiçbir kısıtlama getirmedi! – hasan83

+0

@ hasan83 - "instantiateViewControllerWithIdentifier" öğesini kullandığınızda, işlem aynıdır. Sadece test ettim ve iyi çalışıyor. Uygun bir şekilde tanımlanmamış bazı kısıtlamaların olduğunu iddia ediyorum.Sorununuzun kaynağını hala bulamıyorsanız, kendi sorunuzu sorunun [yeniden üretilebilir bir örneği] (http://stackoverflow.com/help/mcve) ile gönderin. – Rob