Ios scrollView:如何创建带有分页的纯自动布局scrollView?

Ios scrollView:如何创建带有分页的纯自动布局scrollView?,ios,uiscrollview,Ios,Uiscrollview,谁能告诉我我做错了什么。。。 -将UIScrollView固定到其容器视图 -将所有子视图固定到UIScrollView上 在阅读了苹果的技术说明后,我尝试了混合方法和纯自动布局方法。使用NIB的混合方法在分页时效果很差,它看起来像滚动视图中的一幅大图,而不是分页 然后,我在代码中创建了纯自动布局版本UIScrollView作为UIView的子视图。这一次视图卡住了,UIImage非常巨大,就像它的全尺寸一样: //scroll view if (self.scrollView

谁能告诉我我做错了什么。。。 -将UIScrollView固定到其容器视图 -将所有子视图固定到UIScrollView上

在阅读了苹果的技术说明后,我尝试了混合方法和纯自动布局方法。使用NIB的混合方法在分页时效果很差,它看起来像滚动视图中的一幅大图,而不是分页

然后,我在代码中创建了纯自动布局版本UIScrollView作为UIView的子视图。这一次视图卡住了,UIImage非常巨大,就像它的全尺寸一样:

    //scroll view
    if (self.scrollView == nil)
    {
        self.scrollView = [[UIScrollView alloc] initWithFrame:self.frame];

        self.scrollView.translatesAutoresizingMaskIntoConstraints  = NO;

        [self.scrollView setClipsToBounds:NO];
        [self.scrollView setPagingEnabled:YES];

        [self addSubview: self.scrollView];
        [self addConstraints:
         [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(300)]|"
                                                 options:0 metrics:nil
                                                   views:@{@"scrollView":self.scrollView}]];
        [self addConstraints:
         [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView(300)]|"
                                                 options:0 metrics:nil
                                                   views:@{@"scrollView":self.scrollView}]];
-void createContentView {
对于int i=0;i好的,这里有一些错误:

否则,如果i==self.pageImages.count


这个子句永远不会运行,因为当i==self.pageImages.count-1时,循环计数被设置为中断,这里的int i=0;我感谢您的解释…它现在可以工作了。我尝试了不同的方法使它工作,代码有点混乱和错误。我想我遇到的最大问题是VFL没有以UIView结尾。我会注意到它。下面的另一个是imageview大小调整。使用自动布局,似乎只能使用约束来设置大小。注意。是否也使用约束来设置滚动大小,即此处的分页大小,而不是边框?设置滚动视图边框在过去对我很有效。我还有一个问题,您是否可以帮助我确认:使用分页,是否可以使用scrollview预期每个页面都包含在一个单独的UIView中?我知道从语义上看,这样看起来更干净,而且可能也是一种首选方式。但是否绝对有必要将五个UIView(每个UIView都包含UIImageView、标签和按钮)作为子视图添加到scrollview中,并以这种方式添加到页面?我相信,在您的第一条评论中ve页面大小由滚动视图框的宽度定义,因此它捕捉到宽度的倍数。滚动大小被定义为满足其内容约束所需的最大值。您可以将其视为滚动视图内容向外推以扩展可滚动区域。这就是为什么必须运行约束的原因在一条不间断的行中从一个页面滚动到另一个页面才能正常工作。对于您的第二条评论,答案是否定的,您不需要将每个页面都作为自己的UIView,如上所述,分页只会导致滚动捕捉到滚动视图帧宽度的倍数
        [self.scrollView addConstraints:
         [NSLayoutConstraint constraintsWithVisualFormat:@"H:-(10)-[topLabel]-(10)-|"
                                                 options:0 metrics:nil
                                                   views:viewsDictionary]];
        [self.scrollView addConstraints:
         [NSLayoutConstraint constraintsWithVisualFormat:@"H:-(10)-[imageView]-(10)-|"
                                                 options:0 metrics:nil
                                                   views:viewsDictionary]];

        [self.scrollView addConstraints:
         [NSLayoutConstraint constraintsWithVisualFormat:@"H:-(10)-[bottomLabel]-(10)-[button]-(10)-|"
                                                 options:0 metrics:nil
                                                   views:viewsDictionary]];
   @"H:[prevBottomLabel]-(10)-[bottomLabel]....

   prevBottomLabel = bottomLabel;
   // Continue loop
   UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.pageImages objectAtIndex:i]]];

    imageView.frame = CGRectMake(0,0,200,200);

    imageView.translatesAutoresizingMaskIntoConstraints = NO;
    imageView.contentMode = UIViewContentModeScaleAspectFit;
   [imageView addConstraints:
         [NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageView(200)]"
                                                 options:0 metrics:nil
                                                   views:viewsDictionary]];

   [imageView addConstraints:
         [NSLayoutConstraint constraintsWithVisualFormat:@"V:[imageView(200)]"
                                                 options:0 metrics:nil
                                                   views:viewsDictionary]];