使用自定义UITableViewCell时,imageview框架为零

时间:2014-06-08 08:08:36

标签: ios objective-c uitableview uiimageview

我创建了一个自定义的UITableViewCell,但想要使用单元格中的标准UIImageView。

我注意到帧总是归零,这导致了我的问题

@implementation MyCustomCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    // the style is "default" style
    self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
// I need to override the cells image 
    if (self) {
        self.imageView.image = [UIImage imageNamed:@"MyImageToUseInThisCell"]; // The image view frame is {0,0,0,0}
    }
    return self;
}

2 个答案:

答案 0 :(得分:1)

您在-initWithStyle:reuseIdentifier:中无法获得任何帧大小,因为尚未加载单元格,这意味着尚未创建subview天堂(nil ),因此为0帧尺寸 即使对于viewController,您也不会在-initWithNibName:方法中获得帧大小。

你会更好:

  1. -layoutSubviews
  2. 中的特定相关内容
  3. -awakeFromNib或直接通过IB )设置初始属性
  4. 无论如何,试试这个:

    //does this method even run? it shouldn't for a custom UITableViewCell
    //unless you've mixed up things unnecessarily
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            NSLog(@"initWithStyle -- %@",self.myImageView);
        }
        return self;
    }
    
    //do frame related stuff here
    -(void)layoutSubviews
    {
        //fyi: this method is called anytime any frame changes
    
        NSLog(@"layoutSubviews -- %@",self.myImageView);
    }
    
    - (void)awakeFromNib
    {
        //fyi: this method is called when the view is pulled from the IB
    
        // Initialization code
        NSLog(@"awakeFromNib -- %@",self.myImageView);
    
        //do you thang here
        [self.myImageView setImage:[UIImage imageNamed:@"MyImageToUseInThisCell"]];
    }
    

答案 1 :(得分:1)

似乎问题是当使用重用标识符和索引路径对自定义单元格进行出列时,自定义单元格基类不会设置这些属性。在文档中没有提到这是非常不幸的。