UIImageViews嵌入UIScrollView代码w / auto layout on

时间:2013-05-05 17:31:57

标签: ios uiscrollview uiimageview autolayout viewdidload

我目前在使用iOS应用和Autolayout时出现问题。我想让用户在UIScrollView中滚动来自Tumblr的照片(类似于照片应用,滚动图书馆时)。因此,当我的ImageViewController进入屏幕时,它有一个帖子数组,但还没有图像数据。我的问题如下:

在我的scrollView中,我想根据需要添加尽可能多的UIImageViewS,我希望它们的大小相同。我该怎么办?我尝试了很多(可能设计不好的: - /)方式,例如initwithframe:开启自动布局并在NSMutableArray中保留对它们的引用......

我现在的目标是将它们添加到viewDidLoad中的scrollView并设置正确的约束。

感谢您的帮助,抱歉我的英语不好

修改

好的我解决了我的问题:我使用了一个很好的scrollView并在viewWillAppear

中设置了自动布局的约束

以下是感兴趣的人的代码(抱歉布局): - (void)viewWillAppear:(BOOL)动画 {

[super viewWillAppear:animated];
[self downloadPhotos];
[self.scrollView setContentOffset:CGPointMake(self.selectedImageIndex * self.scrollView.frame.size.width, 0) animated:NO];

// Add UIImageViewS to self.scrollView with constraints and so on...
NSMutableDictionary *viewsDictionnary = [[NSMutableDictionary alloc] init];
NSMutableString *imageViewsString = [[NSMutableString alloc] init];
NSMutableArray *imageViews = [[NSMutableArray alloc] init];

for (int i = 0; i < self.fetchedResultsController.fetchedObjects.count; i++) {
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.scrollView.bounds];
    imageView.image = [UIImage imageNamed:@"placeholder_imageView"];
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    imageView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.scrollView addSubview:imageView];

    [imageViews addObject:imageView];
    [viewsDictionnary setObject:imageView forKey:[NSString stringWithFormat:@"imageView%d", i]];
    [imageViewsString appendString:[NSString stringWithFormat:@"[imageView%d]", i]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0.0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0.0]];
}
self.imageViews = imageViews;
NSString *horizontal = [NSString stringWithFormat:@"H:|%@|", imageViewsString];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:horizontal options:0 metrics:0 views:viewsDictionnary]];
[self.scrollView setContentOffset:CGPointMake(self.selectedImageIndex * self.scrollView.frame.size.width, 0) animated:NO];

}

2 个答案:

答案 0 :(得分:0)

 -(void)viewDidLoad 
 {
      [super viewDidLoad];

      float posX = 0.0 , poxY = 0.0;

      float sizeWidth = 100 , sizeHeight = 200;

      float scrollContentWidth = 320.0;

      scrollview.showsHorizontalScrollIndicator=YES;
      scrollview.scrollEnabled=YES;
      scrollview.userInteractionEnabled=YES;
      self.scrollView.pagingEnabled = TRUE;

      for(int i=0;i<[imageArray count];i++)
      {
           NSString *imageURL = [imageArray objectAtIndex:i];

           UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(posX,posY,sizeWidth,sizeHeight)];

           [imageView setImage:[UIImage imageWithContentsOfFile:imageURL]];

           [self.scrollView addSubview:imageView];

           [imageView addConstraint:
           [NSLayoutConstraint constraintWithItem:imageView 
           attribute:NSLayoutAttributeWidth
           relatedBy:NSLayoutRelationEqual
           toItem:imageView 
           attribute:NSLayoutAttributeWidth
           multiplier:1
           constant:100]];

           [imageView  addConstraint:
           [NSLayoutConstraint constraintWithItem:imageView 
           attribute:NSLayoutAttributeHeight
           relatedBy:NSLayoutRelationEqual
           toItem:imageView 
           attribute:NSLayoutAttributeHeight
           multiplier:1
           constant:200]];

           [self.scrollView setContentSize:CGSizeMake(480.0,scrollContentWidth)];

           scrollContentWidth=scrollContentWidth+320.0;

           posX = posX + 320.0;
      }
 }

希望它会对你有所帮助。

答案 1 :(得分:0)

我建议不要使用scrollView,而是使用collectionView(iOS 6及更高版本)。你可能会坚持认为你需要使用iOS 5或iOS 4.为自己轻松做事,collectionViews使内存管理变得简单,如果你打算在视图中加载大量照片,只需使用集合视图。然后,您可以创建一个具有UIImageView的collectionViewCell。 UIImageView只有一个尺寸,你可以设置它的图像缩放比例以适应所以无论什么形状或大小,图像将适合图像视图而不是扭曲。做一些关于收集视图的研究,哎呀,可能有一个教程可以用来从互联网上加载图像并使用集合视图显示它们。