具有大图像和标签

时间:2015-06-26 13:56:08

标签: ios objective-c uitableview

我正在尝试使用数组中的数据填充Tableview。我正在尝试制作一个自定义表格视图单元格,其中包含一个大方形图像,宽度与屏幕相同,高度也应与屏幕宽度相同。在图像下我想添加一个文本标签。 (您可以将其视为Instagram的非常糟糕的副本)

但是,tableview仅显示空标准单元格。

这是我的自定义单元格代码:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self)
    {                
        customImageView.contentMode = UIViewContentModeScaleAspectFit;

        CGRect frame;
        frame.origin.x=0;
        frame.origin.y=0;
        frame.size.width=self.frame.size.width;
        frame.size.height=self.frame.size.width;

        customImageView.frame=frame;

        [customTextLabel sizeToFit];

        frame.origin = CGPointMake(0, (self.frame.size.width+1));
        customTextLabel.frame = frame;

        customTextLabel.numberOfLines = 0;
        customTextLabel.lineBreakMode = NSLineBreakByCharWrapping;

        [self.contentView addSubview:customImageView];
        [self.contentView addSubview:customTextLabel];

        [self.contentView sizeToFit]; } return self;}

和tableview中的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyCellIdentifier = @"MyCellIdentifier";

//UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];

FeedTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];


if(cell == nil) {
    cell = [[FeedTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyCellIdentifier];
}


if(!emptyTable){

     Log *log = [self.feedPosts objectAtIndex:indexPath.section];

    cell.customImageView.image = [self loadImage:(int)log.logID];

    cell.customTextLabel.text = log.logDescription;


}
return cell;}

3 个答案:

答案 0 :(得分:0)

更好的解决方案是使用约束

  1. 创建约会,如下图
  2. enter image description here

    1. 为您的高度宽度创建出口(控制将约束拖到单元格类别)

    2. 上将其更改为屏幕尺寸/高度

      细胞

       override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
          let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableViewCell
          cell.heightConstraint.constant = UIScreen .mainScreen().bounds.height;
          cell.widthConstraint.constant = UIScreen.mainScreen().bounds.width;
          return cell
      } 
      

      不要忘记设置行的高度

      override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
          return UIScreen .mainScreen().bounds.height;
      }
      

      此外,如果需要,可以通过编程方式在代码上重新创建

      希望这有帮助

答案 1 :(得分:0)

你在哪里为cell.customImageView和cell.customTextLabel分配内存?这个问题应该是由于没有生成customeImageView和customeTextLabel引起的。你应该按照下面的代码来修改:

//Setter/Getter 
//allocate memory and init customImageView/customTextLable

- (UIImageView *)customeImageView{ 
    if(!_ customImageView)_customImageView = [UIImageView new];

   return _customImageView;

}

- (UILable *)customTextLabel{
   if(!_customTextLable) _customTextLabel = [UIlable new];

    return _cusomTextLable;
}

然后在initWithStyle:reuseIdentifier:时调用它们。另一件应该注意的是tableView应该按照实现tableView:heightForRowAtIndexPath:

来定制单元格的高度

答案 2 :(得分:0)

我几乎做了DarkHorse所说的。

我忘记了:

customImageView = [[UIImageView alloc] init];

customTextLabel = [[UILabel alloc] init];

然后在

中设置高度

的tableView:heightForRowAtIndexPath