在 for 循环内的 UIImageView 上添加 UILabel

Posted

技术标签:

【中文标题】在 for 循环内的 UIImageView 上添加 UILabel【英文标题】:Adding a UILabel on a UIImageView inside a for loop 【发布时间】:2016-02-16 19:23:50 【问题描述】:

SO 和网上的所有类似问题都是关于在 UIImageView 上放置 UILabel,这是我熟悉的,但是我必须在多个 UIImageView 上放置多个 UILabel。每个 UIImageView 上一个。我有一个这样的 for 循环:

    for(int i=0;i < [arrURL count] ;i++)
    
        UIImageView *view_Image = [[UIImageView alloc]initWithFrame:CGRectMake(x, y, 400, 180)];
        y = y + 182;

        view_Image.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:arrURL[i]]]];


        UILabel  *lblName = [[UILabel alloc] initWithFrame:CGRectMake(view_Image.frame.origin.x, view_Image.frame.origin.y, view_Image.frame.size.width, view_Image.frame.size.height)];

        [lblName setText:arrNames[i]];
        [view_Image addSubview:lblName];
        [mainScroll addSubview:view_Image];
    

当我运行代码时,UILabel 只出现在第一个 UIImageView 上,其余的 UIImageView 出现在 UILabel 的顶部。 (我通过向 UILabel 添加背景颜色发现了这一点)。如何让 UILabel 出现在 UIImageView 上。提前致谢。

【问题讨论】:

我认为这不是在每个 UIImageView 上添加标签的最佳方法...子类化将是一种更简洁的方法。 【参考方案1】:

视图的框架位于其父视图的坐标系中。所以每个图像视图的框架都在mainScroll的坐标系中。

由于您的每个标签都是单独图像视图的子视图,因此每个标签的框架都位于其父图像视图的坐标系中。但是您的行为好像标签的框架位于mainScroll 的坐标中。

UILabel  *lblName = [[UILabel alloc] initWithFrame:view_Image.bounds];

【讨论】:

以上是关于在 for 循环内的 UIImageView 上添加 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

XCODE Objc 以编程方式在 for 中添加 UiimageView

用于查找单元格值是不是在范围内的双 For 循环

for 循环内的 async.waterfall 转义 for 循环

编译时内的模板参数展开for循环?

r闪亮ui中for循环内的逗号

for循环内的回调函数-Nodejs