2016-05-26 5 views
0

私はこの質問への回答を再現しようとしています:autolayoutをプログラムでUIScrollViewにページングしますか?

インターフェイスビルダーを使用する代わりに、プログラムで記述します。

私はいくつかの制約の競合を取得していますが、なぜそれを理解できませんか?

- (void)viewDidLoad { 
[super viewDidLoad]; 

// self.view is always the size of the application window 
self.view = [[UIView alloc] init]; 
self.view.backgroundColor = [UIColor blackColor]; 

self.dummyView = [[UIView alloc] init]; 
self.dummyView.backgroundColor = [UIColor redColor]; 
[self.view addSubview:self.dummyView]; 

self.scrollView = [[UIScrollView alloc] init]; 
self.scrollView.backgroundColor = [UIColor blueColor]; 
[self.dummyView addSubview:self.scrollView]; 

self.contentView = [[UIView alloc] init]; 
self.contentView.backgroundColor = [UIColor orangeColor]; 
[self.scrollView addSubview:self.contentView]; 

self.pageView = [[UIView alloc] init]; 
self.pageView.backgroundColor = [UIColor yellowColor]; 
[self.contentView addSubview:self.pageView]; 

self.pageView2 = [[UIView alloc] init]; 
self.pageView2.backgroundColor = [UIColor greenColor]; 
[self.contentView addSubview:self.pageView2]; 

self.pageView3 = [[UIView alloc] init]; 
self.pageView3.backgroundColor = [UIColor purpleColor]; 
[self.contentView addSubview:self.pageView3]; 

// constraints must be added after the view heirarchy is established 
[self addConstraints]; 

} 

- (void) addConstraints { 

    // Tell autoLayout to use my constraints (as opposed to inventing its own) 
    self.view.translatesAutoresizingMaskIntoConstraints = NO; 


    // **** Dummy View constraints: 

    // dummyView.leading = view.leading 
    NSLayoutConstraint* myConstraint = [NSLayoutConstraint 
        constraintWithItem:self.dummyView 
        attribute:NSLayoutAttributeLeading 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.view 
        attribute:NSLayoutAttributeLeading 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"dummyView.leading = view.leading"; 
    [self.view addConstraint:myConstraint]; 

    // dummyView.trailing = view.trailing 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.dummyView 
        attribute:NSLayoutAttributeTrailing 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.view 
        attribute:NSLayoutAttributeTrailing 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"dummyView.trailing = view.trailing"; 
    [self.view addConstraint:myConstraint]; 

    // dummyView.top = view.top 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.dummyView 
        attribute:NSLayoutAttributeTop 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.view 
        attribute:NSLayoutAttributeTop 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"dummyView.top = view.top"; 
    [self.view addConstraint:myConstraint]; 

    // dummyView.bottom = view.bottom 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.dummyView 
        attribute:NSLayoutAttributeBottom 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.view 
        attribute:NSLayoutAttributeBottom 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"dummyView.bottom = view.bottom"; 
    [self.view addConstraint:myConstraint]; 


    // **** Scroll View constraints 

    // scrollView.trailing = dummyView.trailing 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.scrollView 
        attribute:NSLayoutAttributeTrailing 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.dummyView 
        attribute:NSLayoutAttributeTrailing 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"scrollView.trailing = dummyView.trailing"; 
    [self.dummyView addConstraint:myConstraint]; 

    // scrollView.leading = dummyView.leading 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.scrollView 
        attribute:NSLayoutAttributeLeading 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.dummyView 
        attribute:NSLayoutAttributeLeading 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"scrollView.leading = dummyView.leading"; 
    [self.dummyView addConstraint:myConstraint]; 

    // scrollView.Top = dummyView.top 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.scrollView 
        attribute:NSLayoutAttributeTop 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.dummyView 
        attribute:NSLayoutAttributeTop 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"scrollView.Top = dummyView.top"; 
    [self.dummyView addConstraint:myConstraint]; 

    // scrollView.bottom = dummyView.bottom 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.scrollView 
        attribute:NSLayoutAttributeBottom 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.dummyView 
        attribute:NSLayoutAttributeBottom 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"scrollView.bottom = dummyView.bottom"; 
    [self.dummyView addConstraint:myConstraint]; 





    // **** Content View Constraints 


    // contentView.width = dummyView.width * 3 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.contentView 
        attribute:NSLayoutAttributeWidth 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.dummyView 
        attribute:NSLayoutAttributeWidth 
        multiplier:3.0 
        constant:0]; 
    myConstraint.identifier = @"contentView.width = dummyView.width * 3"; 
    [self.dummyView addConstraint:myConstraint]; 

    // contentView.height = dummyView.height 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.contentView 
        attribute:NSLayoutAttributeHeight 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.dummyView 
        attribute:NSLayoutAttributeHeight 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"contentView.height = dummyView.height"; 
    [self.dummyView addConstraint:myConstraint]; 

    // contentView.leading = scrollView.leading 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.contentView 
        attribute:NSLayoutAttributeLeading 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.scrollView 
        attribute:NSLayoutAttributeLeading 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"contentView.leading = scrollView.leading"; 
    [self.scrollView addConstraint:myConstraint]; 

    // contentView.trailing = scrollView.trailing 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.contentView 
        attribute:NSLayoutAttributeTrailing 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.scrollView 
        attribute:NSLayoutAttributeTrailing 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"contentView.trailing = scrollView.trailing"; 
    [self.scrollView addConstraint:myConstraint]; 

    // contentView.Top = scrollView.top 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.contentView 
        attribute:NSLayoutAttributeTop 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.scrollView 
        attribute:NSLayoutAttributeTop 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"contentView.Top = scrollView.top"; 
    [self.scrollView addConstraint:myConstraint]; 

    // contentView.bottom = scrollView.bottom 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.contentView 
        attribute:NSLayoutAttributeBottom 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.scrollView 
        attribute:NSLayoutAttributeBottom 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"contentView.bottom = scrollView.bottom"; 
    [self.scrollView addConstraint:myConstraint]; 




    // **** Page View 1 Constraints 

    // pageView.leading = contentView.leading 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView 
        attribute:NSLayoutAttributeLeading 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.contentView 
        attribute:NSLayoutAttributeLeading 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView.leading = contentView.leading"; 
    [self.contentView addConstraint:myConstraint]; 

    // pageView.top = contenentView.top 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView 
        attribute:NSLayoutAttributeTop 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.contentView 
        attribute:NSLayoutAttributeTop 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView.top = contenentView.top"; 
    [self.contentView addConstraint:myConstraint]; 

    // pageView.width = dummyView.width 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView 
        attribute:NSLayoutAttributeWidth 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.dummyView 
        attribute:NSLayoutAttributeWidth 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView.width = dummyView.width"; 
    [self.dummyView addConstraint:myConstraint]; 


    // pageView.height = dummyView.height 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView 
        attribute:NSLayoutAttributeHeight 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.dummyView 
        attribute:NSLayoutAttributeHeight 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView.height = dummyView.height"; 
    [self.dummyView addConstraint:myConstraint]; 


    // **** Page View 2 Constraints 

    // pageView2.height = pageView.height 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView2 
        attribute:NSLayoutAttributeHeight 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.pageView2 
        attribute:NSLayoutAttributeHeight 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView2.height = pageView.height"; 
    [self.contentView addConstraint:myConstraint]; 

    // pageView2.width = pageView.width 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView2 
        attribute:NSLayoutAttributeWidth 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.pageView 
        attribute:NSLayoutAttributeWidth 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @" pageView2.width = pageView.width"; 
    [self.contentView addConstraint:myConstraint]; 

    // pageView2.top = pageView.top 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView2 
        attribute:NSLayoutAttributeTop 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.pageView 
        attribute:NSLayoutAttributeTop 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView2.top = pageView.top"; 
    [self.contentView addConstraint:myConstraint]; 

    // pageView2.leading = pageView.trailing 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView2 
        attribute:NSLayoutAttributeLeading 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.pageView 
        attribute:NSLayoutAttributeTrailing 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView2.leading = pageView.trailing"; 
    [self.contentView addConstraint:myConstraint]; 


    // **** Page View 3 Constraints 

    // pageView3.height = pageView.height 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView3 
        attribute:NSLayoutAttributeHeight 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.pageView 
        attribute:NSLayoutAttributeHeight 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView3.height = pageView.height"; 
    [self.contentView addConstraint:myConstraint]; 

    // pageView3.width = pageView.width 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView3 
        attribute:NSLayoutAttributeWidth 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.pageView 
        attribute:NSLayoutAttributeWidth 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView3.width = pageView.width"; 
    [self.contentView addConstraint:myConstraint]; 

    // pageView3.Top = pageView.Top 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView3 
        attribute:NSLayoutAttributeTop 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.pageView 
        attribute:NSLayoutAttributeTop 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView3.Top = pageView.Top"; 
    [self.contentView addConstraint:myConstraint]; 

    // pageView3.leading = pageView2.trailing 
    myConstraint =[NSLayoutConstraint 
        constraintWithItem:self.pageView3 
        attribute:NSLayoutAttributeLeading 
        relatedBy:NSLayoutRelationEqual 
        toItem:self.pageView2 
        attribute:NSLayoutAttributeTrailing 
        multiplier:1.0 
        constant:0]; 
    myConstraint.identifier = @"pageView3.leading = pageView2.trailing"; 
    [self.contentView addConstraint:myConstraint]; 

エラーは以下のとおりです。

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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x134e1c340 h=--& v=--& UIView:0x134e3e740.midX ==>", 
    "<NSAutoresizingMaskLayoutConstraint:0x134d47a20 h=--- v=--- H:[UIWindow:0x134e3a6c0(375)]>", 
    "<NSLayoutConstraint:0x134e4c960 H:|-(0)-[UIView:0x134e3bdf0](LTR) (Names: '|':UIWindow:0x134e3a6c0)>", 
    "<NSLayoutConstraint:0x134e4ca00 UIView:0x134e3bdf0.right == UIWindow:0x134e3a6c0.right>", 
    "<NSLayoutConstraint:0x134e3f150 'dummyView.leading = view.leading' H:|-(0)-[UIView:0x134e3cb00] (Names: '|':UIView:0x134e3bdf0)>", 
    "<NSLayoutConstraint:0x134e3f480 'dummyView.trailing = view.trailing' UIView:0x134e3cb00.trailing == UIView:0x134e3bdf0.trailing>", 
    "<NSLayoutConstraint:0x134e3fc60 'pageView.leading = contentView.leading' H:|-(0)-[UIView:0x134e3e740] (Names: '|':UIView:0x134e3e450)>", 
    "<NSLayoutConstraint:0x134e3fd30 'pageView.width = dummyView.width' UIView:0x134e3e740.width == UIView:0x134e3cb00.width>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x134e3fc60 'pageView.leading = contentView.leading' H:|-(0)-[UIView:0x134e3e740] (Names: '|':UIView:0x134e3e450)> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
2016-05-26 10:28:55.062 autolayouttest[682:208278] 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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x134d3e930 h=--& v=--& UIView:0x134e3e740.midY ==>", 
    "<NSAutoresizingMaskLayoutConstraint:0x134d45af0 h=--- v=--- V:[UIWindow:0x134e3a6c0(667)]>", 
    "<NSLayoutConstraint:0x134e4c910 V:|-(0)-[UIView:0x134e3bdf0] (Names: '|':UIWindow:0x134e3a6c0)>", 
    "<NSLayoutConstraint:0x134e4c9b0 UIView:0x134e3bdf0.bottom == UIWindow:0x134e3a6c0.bottom>", 
    "<NSLayoutConstraint:0x134e3f540 'dummyView.bottom = view.bottom' UIView:0x134e3cb00.bottom == UIView:0x134e3bdf0.bottom>", 
    "<NSLayoutConstraint:0x134e3f4d0 'dummyView.top = view.top' V:|-(0)-[UIView:0x134e3cb00] (Names: '|':UIView:0x134e3bdf0)>", 
    "<NSLayoutConstraint:0x134e3f9c0 'pageView.height = dummyView.height' UIView:0x134e3e740.height == UIView:0x134e3cb00.height>", 
    "<NSLayoutConstraint:0x134e3fce0 'pageView.top = contenentView.top' V:|-(0)-[UIView:0x134e3e740] (Names: '|':UIView:0x134e3e450)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x134e3fce0 'pageView.top = contenentView.top' V:|-(0)-[UIView:0x134e3e740] (Names: '|':UIView:0x134e3e450)> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x134d47a20 h=--- v=--- H:[UIWindow:0x134e3a6c0(375)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x134d476e0 h=--& v=--& UIScrollView:0x135000000.midX ==>", 
    "<NSLayoutConstraint:0x134e4c960 H:|-(0)-[UIView:0x134e3bdf0](LTR) (Names: '|':UIWindow:0x134e3a6c0)>", 
    "<NSLayoutConstraint:0x134e4ca00 UIView:0x134e3bdf0.right == UIWindow:0x134e3a6c0.right>", 
    "<NSLayoutConstraint:0x134e3f150 'dummyView.leading = view.leading' H:|-(0)>", 
    "<NSLayoutConstraint:0x134e3f480 'dummyView.trailing = view.trailing' UIView:0x134e3cb00.trailing == UIView:0x134e3bdf0.trailing>", 
    "<NSLayoutConstraint:0x134e3f610 'scrollView.leading = dummyView.leading' H:|-(0)-[UIScrollView:0x135000000] (Names: '|':UIView:0x134e3cb00)>", 
    "<NSLayoutConstraint:0x134e3f590 'scrollView.trailing = dummyView.trailing' UIScrollView:0x135000000.trailing == UIView:0x134e3cb00.trailing>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x134e3f590 'scrollView.trailing = dummyView.trailing' UIScrollView:0x135000000.trailing == UIView:0x134e3cb00.trailing> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
2016-05-26 10:28:55.067 autolayouttest[682:208278] 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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x134d47a20 h=--- v=--- H:[UIWindow:0x134e3a6c0(375)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x134d43660 h=--& v=--& UIView:0x134e3cb00.midX ==>", 
    "<NSLayoutConstraint:0x134e4c960 H:|-(0)-[UIView:0x134e3bdf0](LTR) (Names: '|':UIWindow:0x134e3a6c0)>", 
    "<NSLayoutConstraint:0x134e4ca00 UIView:0x134e3bdf0.right == UIWindow:0x134e3a6c0.right>", 
    "<NSLayoutConstraint:0x134e3f150 'dummyView.leading = view.leading' H:|-(0)-[UIView:0x134e3cb00] (Names: '|':UIView:0x134e3bdf0)>", 
    "<NSLayoutConstraint:0x134e3f480 'dummyView.trailing = view.trailing' UIView:0x134e3cb00.trailing == UIView:0x134e3bdf0.trailing>" 

任意の助けがにappriciatedされるだろう。ありがとうございました!

答えて

1

// NO = self.view.translatesAutoresizingMaskIntoConstraints(その 自身を発明とは反対に)私の制約を使用するのautoLayoutに知らせます。

これは、プログラムによって作成されたすべてのビューに対して実行する必要があります。 self.viewを作成していないので、このビューではtranslatesAutoresizingMaskIntoConstraintsを変更しないでください。

// Tell autoLayout to use my constraints (as opposed to inventing its own) 
    self.dummyView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.contentView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.scrollView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.pageView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.pageView2.translatesAutoresizingMaskIntoConstraints = NO; 
    self.pageView3.translatesAutoresizingMaskIntoConstraints = NO; 
関連する問題