UIScrollView的所有图像都放在开头

时间:2014-11-25 11:18:25

标签: ios objective-c uiscrollview

我是iOS编程新手。我想使用编码生成所有控件,然后应用约束来实现自动调整功能。除了一个问题之外,我几乎达到了我的要求,并且我的UIScrollView的所有图像都在最初放置,而UIScrollView的其余部分保持为空。我认为我的约束存在某些问题,目前我无法解决它。 这是我的代码

self.bgView.image = [UIImage imageNamed:@"bg.png"];

NSDictionary *viewDictionary = @{@"bgImage":self.bgView,@"scrollView":self.scrollView};

NSDictionary *position = @{@"vSpacing":@0,@"hSpacing":@0};

//here I had specified the size of the background image corresponding to the view

NSArray *constraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-hSpacing-[bgImage]-hSpacing-|" options:0 metrics:position views:viewDictionary];

NSArray *constraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-vSpacing-[bgImage]-vSpacing-|" options:0 metrics:position views:viewDictionary];

[self.view addConstraints:constraint_POS_H];

[self.view addConstraints:constraint_POS_V];



    //here I am specifying the size of scroll view
    [self.view addConstraint:[NSLayoutConstraint
                              constraintWithItem:self.scrollView
                              attribute:NSLayoutAttributeWidth
                              relatedBy:NSLayoutRelationGreaterThanOrEqual
                              toItem:self.bgView
                              attribute:NSLayoutAttributeWidth
                              multiplier:1.0
                              constant:0.0]];

    [self.view addConstraint:[NSLayoutConstraint
                              constraintWithItem:self.scrollView
                              attribute:NSLayoutAttributeHeight
                              relatedBy:NSLayoutRelationEqual
                              toItem:self.bgView
                              attribute:NSLayoutAttributeHeight
                              multiplier:0.5
                              constant:0.0]];


    [self.view addConstraint:[NSLayoutConstraint
                              constraintWithItem:self.scrollView
                              attribute:NSLayoutAttributeCenterX
                              relatedBy:NSLayoutRelationEqual
                              toItem:self.bgView
                              attribute:NSLayoutAttributeCenterX
                              multiplier:1.0
                              constant:0.0]];

    [self.view addConstraint:[NSLayoutConstraint
                              constraintWithItem:self.scrollView
                              attribute:NSLayoutAttributeCenterY
                              relatedBy:NSLayoutRelationEqual
                              toItem:self.bgView
                              attribute:NSLayoutAttributeCenterY
                              multiplier:1.0
                              constant:0.0]];





    //self.view.autoresizesSubviews = YES;
    self.scrollView.pagingEnabled = YES;
    NSInteger numberOfViews = photoArray.count;
    for (int i=0; i < numberOfViews; i++) {
        CGFloat myOrigin = i * self.view.frame.size.width;
        NSLog(@"self.view.frame.size.width : %f",self.view.frame.size.width);
        UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(myOrigin, 0, self.view.frame.size.width, self.scrollView.frame.size.height)];

        [myView setTranslatesAutoresizingMaskIntoConstraints:NO];
        [self.view addSubview:myView];
        //here I am specifying the size of uiview
      [self.view addConstraint:[NSLayoutConstraint
                                  constraintWithItem:myView
                                  attribute:NSLayoutAttributeWidth
                                  relatedBy:NSLayoutRelationGreaterThanOrEqual
                                  toItem:self.scrollView
                                  attribute:NSLayoutAttributeWidth
                                  multiplier:1.0
                                  constant:0.0]];
        [self.view addConstraint:[NSLayoutConstraint
                                  constraintWithItem:myView
                                  attribute:NSLayoutAttributeHeight
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:self.scrollView
                                  attribute:NSLayoutAttributeHeight
                                  multiplier:1.0
                                  constant:0.0]];

        //here I am specifying the position of uiview
         [self.view addConstraint:[NSLayoutConstraint
                                  constraintWithItem:myView
                                  attribute:NSLayoutAttributeCenterX
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:self.scrollView
                                  attribute:NSLayoutAttributeCenterX
                                  multiplier:1.0
                                  constant:0.0]];
        [self.view addConstraint:[NSLayoutConstraint
                                  constraintWithItem:myView
                                  attribute:NSLayoutAttributeCenterY
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:self.scrollView
                                  attribute:NSLayoutAttributeCenterY
                                  multiplier:1.0
                                  constant:0.0]];

        UIImageView *photos = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, myView.frame.size.width, self.scrollView.frame.size.height)];
        //self.photos = [UIImageView new];
        [photos setTranslatesAutoresizingMaskIntoConstraints:NO];

        photos.image = [photoArray objectAtIndex:i];
        [myView addSubview:photos];
        //here I am specifying the size of image view within scroll view
           [self.view addConstraint:[NSLayoutConstraint
                                  constraintWithItem:photos
                                  attribute:NSLayoutAttributeWidth
                                  relatedBy:NSLayoutRelationLessThanOrEqual
                                  toItem:myView
                                  attribute:NSLayoutAttributeWidth
                                  multiplier:1.0
                                  constant:0.0]];
        [self.view addConstraint:[NSLayoutConstraint
                                  constraintWithItem:photos
                                  attribute:NSLayoutAttributeHeight
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:self.scrollView
                                  attribute:NSLayoutAttributeHeight
                                  multiplier:1.0
                                  constant:0.0]];

        //here I am specifying the position of the image view
        [self.view addConstraint:[NSLayoutConstraint
                                  constraintWithItem:photos
                                  attribute:NSLayoutAttributeCenterX
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:self.scrollView
                                  attribute:NSLayoutAttributeCenterX
                                  multiplier:1.0
                                  constant:0.0]];
        [self.view addConstraint:[NSLayoutConstraint
                                  constraintWithItem:photos
                                  attribute:NSLayoutAttributeCenterY
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:myView
                                  attribute:NSLayoutAttributeCenterY
                                  multiplier:1.0
                                  constant:0.0]];






        self.scrollView.delegate = self;
        [self.scrollView addSubview:myView];
        NSLog(@"self.myView.frame.size.width : %f",myView.frame.size.width);

    }

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews,
                                             self.scrollView.frame.size.height);
    CGPoint scrollPoint = CGPointMake(0, 0);
   [self.scrollView setContentOffset:scrollPoint animated:YES];

    [self.view addSubview:self.scrollView];

1 个答案:

答案 0 :(得分:1)

你可以通过在storyboard中使用重置建议的约束来轻松解决它。首先选择viewController,然后按右下方菜单并选择重置为所有视图选项卡中的建议约束

这对我有用。

enter image description here