简体   繁体   中英

how to set subview of UIScrollView using autolayout

i am trying to implement Horizontal scrollview with ten views. its working fine in portrait mode but i want same scenario in landscape too. can anyone help me by which constraint i can achieve this?

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.title=@"Demo.....";


    self.myScrollView.pagingEnabled = YES;

    NSInteger numberOfViews = 10;
    for (int i = 0; i < numberOfViews; i++) {

        CGFloat myOrigin = i * self.view.frame.size.width;


        UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(myOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)];

        myView.backgroundColor = [UIColor purpleColor];


        CGRect myFrame = CGRectMake(10.0f, 70.0f, 200.0f, 25.0f);
        UILabel *myLabel = [[UILabel alloc] initWithFrame:myFrame];
        myLabel.translatesAutoresizingMaskIntoConstraints = NO;
        myLabel.text = [NSString stringWithFormat:@"This is page number %d", i];
        myLabel.font = [UIFont boldSystemFontOfSize:16.0f];
        myLabel.textAlignment =  NSTextAlignmentLeft;
        [myView addSubview:myLabel];


        //set the scroll view delegate to self so that we can listen for changes
        self.myScrollView.delegate = self;
        //add the subview to the scroll view
        [self.myScrollView addSubview:myView];


        NSLayoutConstraint *constraintLeft = [NSLayoutConstraint constraintWithItem:myView
                                                                          attribute:NSLayoutAttributeLeft
                                                                          relatedBy:NSLayoutRelationEqual
                                                                             toItem:self.myScrollView
                                                                          attribute:NSLayoutAttributeLeft
                                                                         multiplier:1.0
                                                                           constant:0.0];
        // 0px to the right of the UIScrollView
        NSLayoutConstraint *constraintRight = [NSLayoutConstraint constraintWithItem:myView
                                                                           attribute:NSLayoutAttributeRight
                                                                           relatedBy:NSLayoutRelationEqual
                                                                              toItem:self.myScrollView
                                                                           attribute:NSLayoutAttributeRight
                                                                          multiplier:1.0
                                                                            constant:0.0];
        [self.myScrollView addConstraint:constraintLeft];
        [self.myScrollView addConstraint:constraintRight];

    }

    //set the content size of the scroll view, we keep the height same so it will only
    //scroll horizontally
    self.myScrollView.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews,
                                               self.view.frame.size.height);

    //we set the origin to the 3rd page
    CGPoint scrollPoint = CGPointMake(self.view.frame.size.width * 2, 0);
    //change the scroll view offset the the 3rd page so it will start from there
    [myScrollView setContentOffset:scrollPoint animated:YES];

    [self.view addSubview:self.myScrollView];

}

in my above code, ten view is completely added into scrollview and working fine in portrait mode but when i change the orientation to horizontal it will not resize and not scrolled.

You need to tie subviews width constraint equal to scrollView width

 for (UIView *subView in subViews)
 {
       NSLayoutConstraint *constraintEqualWidth = [NSLayoutConstraint constraintWithItem:subView
                                                                       attribute:NSLayoutAttributeWidth
                                                                       relatedBy:NSLayoutRelationEqual
                                                                          toItem:self.myScrollView
                                                                       attribute:NSLayoutAttributeWidth
                                                                      multiplier:1.0
                                                                        constant:0.0];
       [subView addConstraint:constraintEqualWidth];
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM