Objective-C:仅为一个视图添加子视图

时间:2016-11-23 10:10:44

标签: ios objective-c

对于每个UIImageView,我想向其添加标签子视图。 这是我继承的形式UIImageView

-(instancetype)initWithFrame:(CGRect)frame
{
if (self=[super initWithFrame:frame]) {
    self.categoryLabel=[[UILabel alloc]initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, 50)];

    self.categoryLabel.textAlignment=NSTextAlignmentCenter;
    self.categoryLabel.font=[UIFont systemFontOfSize:20];
    self.categoryLabel.textColor=[UIColor whiteColor];

    [self addSubview:self.categoryLabel];
    NSLog(@"%@",self.subviews);
}
return self;
}
-(void)setModel:(HorizontalModel *)model
{
 _model=model;
 self.categoryLabel.text=self.model.category;
 [self sd_setImageWithURL:[NSURL URLWithString:[NSString  stringWithFormat:@"XXXXX%@",self.model.imgURL]] placeholderImage:[UIImage imageNamed:@"obama"]];
  }

这是我在视图控制器中的代码。

-(void)addImage:(NSNotification *)notification
{
self.HArrayLists=notification.userInfo[@"array"];
for (int i=0; i<[self.HArrayLists count]; i++) {
    JTImageView *imageView=[[JTImageView alloc]   initWithFrame:CGRectMake(i*310, 0, 300, 200)];
    imageView.model=[HorizontalModel restaurantsDetailWithDict: self.HArrayLists[i]];
    [self.mediaScrollView addSubview:imageView];
}
self.mediaScrollView.contentSize=CGSizeMake(310*[self.HArrayLists count], 0);

}

事实证明,只有第一个imageView显示标签,而其余的imageViews只显示图像。

2 个答案:

答案 0 :(得分:1)

我认为问题的核心是这一行:

self.categoryLabel=[[UILabel alloc]initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, 50)];

您正在通过图像的x和y值偏移标签的x和y位置。这会将它们放在图像区域之外,并使用图像剪切,使它们不可见。我认为该行应该是

self.categoryLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, 50)];

将所有标签放在每个图像的左上角。

话虽如此,我还想提供一些建议。

首先使所有变量名以小写字母开头。因此self.HArrayLists应为self.hArrayLists

然后尝试使变量名称与其内容匹配。所以再看一下self.HArrayLists,或许类似于self.imageData

接下来我会以不同的方式完成构图。我将UIView添加UILabelUIImageView个实例。使用这样的父视图来布局两个子视图通常可以使生活更轻松。

我还会考虑使用UICollectionViewUICollectionViewController而不是UIScrollView。您需要花些时间了解集合视图的工作原理。但是,您将获得性能和更好的布局管理。

最后,研究约束。它们是构建现代应用程序的重要组成部分,可以轻松适应不同大小的屏幕,旋转和布局。

答案 1 :(得分:0)

您需要正确设置为categoryLabel&#39; frame

self.categoryLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, frame.origin.y, frame.size.width, 50)];