添加UIImageView作为UILabel的子视图,图像不显示

时间:2013-07-12 18:59:31

标签: ios uilabel

因此,当我使用常规旧视图执行此操作时:

UIView *topBlock = [[UIView alloc] initWithFrame:CGRectMake(0,-frameSize.height, frameSize.width, frameSize.height/2)];
[viewController.view addSubview:topBlock];
topBlock.autoresizesSubviews = NO;
topBlock.clipsToBounds = YES;
UIImage *topImage = [UIImage imageNamed:@"BloktLayout"];
UIImageView *topImageView = [[UIImageView alloc] initWithImage:topImage];
topImageView.frame = viewController.view.frame;
[topBlock addSubview:topImageView];

在顶视图中,我得到了我想要的漂亮旧图像。但是中间视图是UILabel,当我尝试同样的事情时:

UILabel *midBar = [[UILabel alloc] initWithFrame:CGRectMake(midBarOrigin.x, midBarOrigin.y, midBarWidth, midBarHeight)];
midBar.text = @"Blokt";
midBar.textColor = [UIColor blackColor];
midBar.textAlignment = NSTextAlignmentRight;
midBar.font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:80.0f];
[viewController.view addSubview:midBar];
midBar.autoresizesSubviews = NO;
midBar.clipsToBounds = YES;
UIImage *midImage = [UIImage imageNamed:@"BloktLayout"];
UIImageView *midImageView = [[UIImageView alloc] initWithImage:midImage];
midImageView.frame = viewController.view.frame;
[midBar addSubview:midImageView];

我在UILabel中根本看不到任何图像。有什么帮助吗?

4 个答案:

答案 0 :(得分:1)

好像这个问题与你的框架有关。

如果没有其他信息,说得太过分了。您可以发布viewController.view.frameframeSizemidBarOrigin / midBarWidth / midBarHeight吗?

在第二个代码块midBar.clipsToBounds == YES中,看起来midImageView.frame可能非常不同/在midBar.frame之外,在这种情况下它将不可见。

修改有些屏幕截图会有所帮助,但不是必需的

编辑2 请注意,子视图的原点始终相对于其超视图的坐标系,从不相对于视图层次结构中任何其他视图的坐标系。这可能是这个问题的核心。如果您确实希望将CGPoints或CGRects从一个坐标系转换为另一个坐标系,UIView上有方法,如convertRect:和convertPoint:等。

答案 1 :(得分:0)

Interface Builder甚至不允许您在UILabel中添加控件。

相反,如果您希望对多个控件进行分组,则可以将它们添加为UIView的子视图。

换句话说,您的图片视图和标签可以共享同一个超级视图,但图片视图不能是标签的子视图。

如果他们共享相同的超级视图,您可以将图像视图放在标签后面,只要标签的背景清晰,它就应该显示在“标签”之外。

答案 2 :(得分:0)

简单的方法.....
您可以添加UIImageViewUILabel作为cell.textLabel

的子视图
UIImageView *statusImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 4, 8, 8)];<br/>statusImage.backgroundColor = [UIColor redColor];<br/>
statusImage.layer.cornerRadius = 4;<br/>
statusImage.clipsToBounds = YES;<br/>
[cell.textLabel addSubview:statusImage];<br/>

UILabel *Lbl = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, cell.textLabel.frame.size.width - 15, cell.textLabel.frame.size.height)];<br/>
Lbl.text = @"xyz";<br/>
[cell.textLabel addSubview:Lbl];<br/>

答案 3 :(得分:0)

我也遇到了这个问题。 我发现ImageView落后于标签。 当我用UIView替换标签时,它可以正常工作。