0

所以我有一个带有动态原型的 UITableview。这些单元格是具有 4 个属性的自定义单元格:

  • imageVBkg(背景图像)
  • 主文本(标签)
  • 副标题(标签)
  • personImageView(带有此人照片的 uiimageview)。

我在原来的故事板中工作得很好,但最近搬到了一个新的故事板上。(仅供参考,我无法用旧的故事板重新测试,因为代码发生了一些更改,排除了这种情况)。

** 这似乎是一个自动布局问题。禁用自动布局可以解决问题(但自动布局是有原因的)。**

基本上,问题是这样的:

  • 标签内容显示正常(数据取自 fetchedresultscontroller/coredata)
  • imageVBkg 工作正常
  • 记录报告图像确实存在
  • 项目清单
  • 最初显示时,personImageView 内容不可见
  • 一旦我滚动并“重用”单元格,personImageView 内容就会正确显示。

** 编辑 **

  • 如果我选择一个单元格并转到下一个屏幕,然后点击保存按钮,应用程序将返回到原始的 tableview 屏幕,并出现图像。不过,更新 coredata 信息会使图像出现并没有真正的意义。

下面的一些示例代码...

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    PersonCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"personCell" forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[PersonCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"personCell"];
    }
    cell.delegate = self;
    cell.dataSource = self;
    cell.backgroundColor = _blueColor;

    [self configureCell:cell atIndexPath:indexPath];
    return cell;
}

-(void)configureCell:(PersonCell *)cell atIndexPath:(NSIndexPath *)indexPath
{

    Person *person = [_fetchedResultsController objectAtIndexPath:indexPath];

    cell.imageVBkg.image = [[UIImage imageNamed:@"list-item-background"] resizableImageWithCapInsets:UIEdgeInsetsMake(50, 50, 30, 30)];
    cell.mainText.text = [NSString stringWithFormat:@"%@ %@", person.firstname, person.lastname];
    Company *company = (Company *)person.worksFor;
    NSString *fullString = person.position;
    if ([company.name length] > 0 && [person.position length] > 0) {
        fullString = [fullString stringByAppendingString:@" at "];
    }
    if (company.name != nil) {
        fullString = [fullString stringByAppendingString:company.name];
    }

    cell.subtitle.text = fullString;

    if ([person hasPhoto]) {
        _image = [person photoImage];
        if (_image != nil) {
            cell.personImageView.clipsToBounds = YES;
            cell.personImageView.image = _image;
            cell.personImageView.layer.cornerRadius = cell.personImageView.bounds.size.width / 2.0f;
        }
    }
}

PersonCell.h 具有以下属性:

@property (nonatomic, weak) IBOutlet UILabel *mainText;
@property (nonatomic, weak) IBOutlet UILabel *subtitle;
@property (nonatomic, weak) IBOutlet UIImageView *personImageView;
@property (strong, nonatomic) IBOutlet UIImageView *imageVBkg;

还值得一提...如果我不使用“cell.personImageView.clipsToBounds = YES;” 然后 personImageView 图像确实出现了,但是作为一个正方形,而不是一个圆形,这就是我需要的。

希望这是一个简单的修复...

在此先感谢您的任何建议。

4

3 回答 3

1

在单元格中使用此代码作为行这里 122,111 是表格视图单元格中图像视图的框架

 CGSize itemSize = CGSizeMake(122,111);    
 UIGraphicsBeginImageContextWithOptions(itemSize, NO, UIScreen.mainScreen.scale);           
    CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);     
    [cell.imageView.image drawInRect:imageRect];             
  cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext();      
    UIGraphicsEndImageContext();
于 2017-08-08T10:56:08.013 回答
0

首先,您需要标记您的单元格。

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    PersonCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"personCell" forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[PersonCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"personCell"];
    }
    cell.delegate = self;
    cell.dataSource = self;
    cell.backgroundColor = _blueColor;

   //See these two lines 
   //Edit
    cell.tag = indexPath.row;

   [self configureCell:cell];

   return cell;
}

第二你必须像这样改变你的配置单元方法。

  -(void)configureCell:(PersonCell *)cell
  {
   //Edit
    NSInteger index = (NSInteger) (cell.tag)
    NSIndexPath *path = [NSIndexPath indexPathWithIndex:index];

    // after this place your code.
   }
于 2014-10-26T06:19:49.837 回答
0

由于某种原因,完全禁用自动布局和大小类,然后重新启用和配置它们已经修复了它。仅仅消除约束是行不通的。不知道真正的问题是什么。欢迎提出建议。

于 2014-10-29T23:54:59.177 回答