在UITableView中居中图像

时间:2014-01-08 16:35:13

标签: ios objective-c uitableview

我的UITableViewCell中的图像居中存在很多问题。我花了无数个小时尝试堆栈溢出中列出的所有解决方案以及无数其他网站。我的文本将居中,但由于某种原因,我的图像不会居中,桌子左侧有一条白线,我无法摆脱它。(从我在iOS文档中读到的,这是在iOS 7中是新的,但人们已经让它消失了)我已经通过编程和检查器将所有插入设置为零。我正在使用核心数据来检索图像,这是正常工作,只是我的图像不会居中。

这是tableViewCell的方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:CellIdentifier];
}

// Configure the cell...
NSManagedObject *moment = [self.moments objectAtIndex:indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@"%@", [moment valueForKey:@"name"]];
UIImage *cellImage = [UIImage imageWithData:[moment valueForKey:@"image"]];
cell.imageView.image = cellImage;
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.textLabel.textColor = [UIColor whiteColor];



return cell;
}

除此之外,我似乎无法让我的标签超越图像,这是另一个问题。但我尝试解决这个问题的方法是制作一个自定义的单元子类,它不起作用。我完全没有资源和想法来解决这个问题。

关于CUSTOM SUBCLASS的编辑 所以我可能对UITableViewCell的自定义子类有错误的想法。但我所做的是创建一个类,在一个名为customCell的类中有两个变量,一个用于UIImageView,另一个用于标签。然后在主表视图中我称它们为:

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:CellIdentifier];
}

// Configure the cell...
NSManagedObject *moment = [self.moments objectAtIndex:indexPath.row];
//cell.textLabel.text = [NSString stringWithFormat:@"%@", [moment valueForKey:@"name"]];
//UIImage *cellImage = [UIImage imageWithData:[moment valueForKey:@"image"]];
//cell.imageView.image = cellImage;
//cell.textLabel.textAlignment = NSTextAlignmentCenter;
//cell.textLabel.textColor = [UIColor whiteColor];
CustomCell *customCell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
[customCell.cellTitle setText:[NSString stringWithFormat:@"%@", [moment valueForKey:@"name"]]];
[customCell.cellImage setImage:[UIImage imageWithData:[moment valueForKey:@"image"]]];



return cell;
}

然后,只需在自定义单元格类中,我就将标签和图像连接到IBOutlet并合成它们。

编辑2自定义子类添加

头文件有两个属性。一个用于cellTitle,它是一个UILabel,一个用于cellImage,它是一个UIImageView。

@interface CustomCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIImageView *cellImage;
@property (weak, nonatomic) IBOutlet UILabel *cellTitle;

实施档案:

这里我只是在合成这两个对象。

@synthesize cellImage;
@synthesize cellTitle; 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString       *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
}
return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

// Configure the view for the selected state
}

6 个答案:

答案 0 :(得分:1)

CustomCell *customCell = (CustomCell *)[tableView 
      dequeueReusableCellWithIdentifier:CellIdentifier];
[customCell.cellTitle setText:[NSString stringWithFormat:@"%@", 
      [moment valueForKey:@"name"]]];
[customCell.cellImage setImage:
      [UIImage imageWithData:[moment valueForKey:@"image"]]];
return cell;

我相信您要返回默认cell,而不是customCell

答案 1 :(得分:0)

给你的细胞子类做一个方法

- (void)layoutSubviews {
    self.cellTitle.frame = CGRectMake(...); //self.view.frame will return the cell's frame
    self.cellImage.frame = CGRectMake(...); //you should set the frames of title and imageView however you want them in here
}

答案 2 :(得分:0)

  • (void)layoutSubviews { [Self.cellImage setCentre:Self.contentView.Centre];}

答案 3 :(得分:0)

经过漫长的一天努力解决这个问题后,我遇到了一个小小的错误,导致了整个崩溃。我在检查器中将我的单元标识符设置为“CellIdentifier”。我把它改成了“Cell”并编辑了一些代码和繁荣!

我在CustomCell中添加了一些代码:

-(void)layoutSubviews {
self.imageView.center = self.contentView.center;
[super layoutSubviews];
}

修复了一切。右侧没有栏,标题和图像都居中。这是TableViewController.m

中的最终代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";
//CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:CellIdentifier];
}

// Configure the cell...
NSManagedObject *moment = [self.moments objectAtIndex:indexPath.row];
/*cell.textLabel.text = [NSString stringWithFormat:@"%@", [moment valueForKey:@"name"]];
UIImage *cellImage = [UIImage imageWithData:[moment valueForKey:@"image"]];
cell.imageView.image = cellImage;
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.textLabel.textColor = [UIColor whiteColor];*/
[cell.cellImage setImage:[UIImage imageWithData:[moment valueForKey:@"image"]]];
[cell.cellTitle setText:[NSString stringWithFormat:@"%@", [moment valueForKey:@"name"]]];









return cell;
}

我仍然在那里注释掉代码,抱歉。但是,谢谢你们所有帮助解决这个问题!

答案 4 :(得分:0)

不要使用来自CELL的默认IMAGEVIEW ...创建一个UIImageView ...将它添加到所需位置的单元格视图中.. =) GL HF

答案 5 :(得分:0)

您可以为表格视图制作自定义单元格并在表格视图中加载此单元格,因为您可以根据需要将内容放置在所需位置的自定义单元格中。如果您的应用程序需要复杂的设计,这是制作表格视图单元格的最佳方法在表视图中。示例:static NSString * CustomCellIdentifier = @“CEll”; // [NSString stringWithFormat:@“Cell%d”,indexPath.row];

customCell *cell = (customCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier]; implement this in your cellforrowAtIndexPath method and add your cell nib -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];     如果(自我)     {

    self = (customCell *)[[[NSBundle mainBundle] loadNibNamed:@"customCell" owner:self options:nil] firstObject];}

}