为啥我的 UIView 中没有显示任何内容?
Posted
技术标签:
【中文标题】为啥我的 UIView 中没有显示任何内容?【英文标题】:Why is nothing displaying in my UIView?为什么我的 UIView 中没有显示任何内容? 【发布时间】:2013-12-20 11:39:16 【问题描述】:我有以下代码添加了一个 UIView,然后添加了一个 UIImageView 和 UILabel,UIView 显示正确,但我没有在视图中显示任何内容。我到处寻找,但找不到答案。 UIView 在特定条件下呈现,当它被点击时它会消失。
这是我的代码。
UIView *actionView = [[UIView alloc] initWithFrame:CGRectMake(20, 180, 280, 165)];
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[actionView addGestureRecognizer:singleFingerTap];
actionView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
actionView.layer.cornerRadius = 5;
actionView.layer.masksToBounds = YES;
[self.view addSubview:actionView];
UILabel *actionText = [[UILabel alloc] initWithFrame:CGRectMake(20, 180, 280, 165)];
actionText.text = @"Hello";
actionText.textColor = [UIColor redColor];
actionText.textAlignment = NSTextAlignmentCenter;
[actionText setTextColor:[UIColor redColor]];
[actionText setBackgroundColor:[UIColor clearColor]];
[actionText setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]];
actionText.Frame = CGRectMake(20, 180, 280, 165);
[actionView addSubview:actionText];
UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"trash-icon.png"]];
UIImageView* blockView = [[UIImageView alloc] initWithImage:image];
blockView.frame = CGRectMake(109, 273, 40, 40);
[actionView addSubview:blockView];
【问题讨论】:
您的标签框架和图像视图框架超出了 UIView 的范围。 【参考方案1】:改变你的框架位置,比如..
UILabel *actionText = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 280, 40)];
actionText.text = @"Hello";
actionText.textColor = [UIColor redColor];
actionText.textAlignment = NSTextAlignmentCenter;
[actionText setTextColor:[UIColor redColor]];
[actionText setBackgroundColor:[UIColor clearColor]];
[actionText setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]];
[actionView addSubview:actionText];
UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"trash-icon.png"]];
UIImageView* blockView = [[UIImageView alloc] initWithImage:image];
blockView.frame = CGRectMake(109,70, 40, 40);
[actionView addSubview:blockView];
【讨论】:
【参考方案2】:当您设置视图的框架时,请务必记住,原点与添加它的父视图的坐标系相关。
因此,当您将标签的框架设置为:
UILabel *actionText = [[UILabel alloc] initWithFrame:CGRectMake(20, 180, 280, 165)];
x = 20, y = 180 的原点最终成为 actionView 内的原点。现在这是您的问题,因为您的 actionView 只有 165px 高,并且您告诉 actionText 子视图它的 y 原点是 180,这远远超出了 actionView 的底部。
对于您的 actionText,您应该按如下方式分配它:
UILabel *actionText = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 280, 165)];
对于您的 blockView,类似于:
blockView.frame = CGRectMake(89,93, 40, 40);
【讨论】:
以上是关于为啥我的 UIView 中没有显示任何内容?的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个自定义 UIView 代码不显示 UILabel 的?
使用 iCarousel 时,我的自定义 UIView 显示但里面啥都没有?