子视图重叠的问题

Posted

技术标签:

【中文标题】子视图重叠的问题【英文标题】:Issue with subviews overlapping 【发布时间】:2015-06-09 13:02:53 【问题描述】:

我正在尝试创建一个包含多个图像的自定义视图。我通过以编程方式添加它们来做到这一点。问题是这些子视图相互重叠,我找不到改变它的方法。我能看到的唯一解决方案是以编程方式为每个新图像设置框架。如果有人能告诉我解决此问题的最佳方法是什么,我将不胜感激。

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

【问题讨论】:

你想如何收集它们?喜欢一张图片中的几张图片还是你想喜欢 UICollectionView 的东西? 您需要为每个 UIImageView [定义一个框架][1] 或使用 [约束][2] 来布局它们。 [1]:***.com/questions/19442142/… [2]:***.com/questions/12826878/… 是的,正如@grhnkdlk 所说,你可以在 UICollectionView 中将它们显示为单元格。也许这是最好的方法。它提供了布局的所有灵活性,U 可以调整边距、图像数量、处理滑动等。但是,如果您需要一种简单的方法来将几个图像添加到自定义视图中,可能是几个图像,根据某些条件可能存在或不存在:1)设置框架并可能自动调整掩码(但准备好可能出现的问题)如果方向改变,则布局)2)或设置自动布局约束并且根本不使用框架 谢谢大家)) 【参考方案1】:

如果你想让你的customViewUICollectionView 一样,你需要一个UIScrollView 并在其中添加你的subviews。每次添加子视图时都会更改框架位置,因此可能是这样的:

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];

    



【讨论】:

非常感谢您的回答!【参考方案2】:

如果不使用 Interface Builder,您唯一真正的选择是更改框架或中心。

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

此方法可让您调整大小和移动,而更改中心可让您做到这一点,即移动视图的中心。

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

或者按照建议添加约束。

【讨论】:

以上是关于子视图重叠的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何防止子视图重叠标签栏?

IOS 6子视图在父视图中重叠工具栏

UITextField becomeFirstResponder 和重叠子视图

ios 7子视图UINavigationBar与状态栏重叠..任何简单的解决方案..?

如何检查多个 UIView 子视图相互重叠显示的贝塞尔路径内的触摸事件?

防止视图重叠