Issue with subviews overlapping

799 views Asked by At

I'm trying to create a custom view which containes several images. I do that by adding them programmatically. The problem is that those subviews overlap each other and I can't find the way to change that. The only solution I can see is doing something like setting frames for each new image programmatically. I would be grateful if someone could tell me what is the best way to solve this issue.

for (id image in self.images) {
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    [self.imageViews addObject:imageView];
    [self addSubview:imageView];
}
2

There are 2 answers

0
Brandon Shega On BEST ANSWER

Without using Interface Builder your only real options are to change the frame or the center.

imageView.frame = CGRectMake(x coord, y coord, width, height);

This method lets you resize and move whereas changing the center lets you do just that, move the center of the view.

or

imageView.center = CGPointMake(x coord, y coord);

Or as recommended add constraints.

0
Gürhan KODALAK On

If you wanna make your customView like UICollectionView you need a UIScrollView and add your subviews in it. Everytime when you add a subview change frame location so it could be something like this:

int xPosition = 0;
int yPosition =0;
for (id image in self.images) {

    if (xPosition>self.view.frame.size.width) {
        //give size to every imageView and every time in loop change the location
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xPosition, yPosition, 50, 50)];
        imageView.image = image;
        yPosition = yPosition + 50;
        [self.view addSubView:imageView];
    }
    else {
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xPosition, yPosition, 50, 50)];
        imageView.image = image;
        xPosition = xPosition + 50;
        [self.view addSubView:imageView];

    }


}