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

Posted

技术标签:

【中文标题】使用自定义 UITableViewCell 时,imageview 框架为零【英文标题】:When using a custom UITableViewCell the imageview frame is zero 【发布时间】:2014-06-08 08:08:36 【问题描述】:

我创建了一个自定义 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;

【问题讨论】:

-initWithStyle: 中设置断点。它击中了这个方法吗?另外,请包括您的-cellForRowAtIndexPath:(为了清楚起见)。即使它确实命中-initWithStyle:,它也不会返回任何帧大小,因为尚未加载单元格,这意味着尚未创建subviews(nil)。在-layoutSubviews 中使用特定于框架的相关内容会更好,至于设置图像属性,我会在-awakeFromNib 中进行 顺便说一句...我不完全确定你的问题的细节,所以我只是把它放在那里(虽然你看起来应该知道)但是您必须手动将UIImageView 对象拖到您的自定义UITableViewCell 上。自定义 UITableViewCell 中没有标准的UIImageView 【参考方案1】:

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

你会更好:

    -layoutSubviews 中的框架特定相关内容 在-awakeFromNib 中设置初始属性(或直接通过 IB

不管怎样,试试这个:

//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"]];


-layoutSubviews on SO -awakeFromNib on SO

【讨论】:

那里的尺寸也为零 @AvnerBarr :您是否通过 IB 拖动并连接了 UIImageView 对象? (在我的例子中,它被称为myImageView @AvnerBarr。然后西布?为清楚起见,将-cellForRowAtIndexPath: 方法添加到您的问题中 似乎问题在于,当使用重用标识符和单元标识符对自定义单元进行分组时,单元不会设置这些属性【参考方案2】:

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

【讨论】:

我也怀疑。

以上是关于使用自定义 UITableViewCell 时,imageview 框架为零的主要内容,如果未能解决你的问题,请参考以下文章

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

在使用自定义 UITableViewCell 时检测 UIButton

在自定义 UITableViewCell 上使用图像时 IOS 8 崩溃

自定义uitableviewcell时,registerNib与registerClass的区别(转载)

在 iOS 中使用自定义单元格时无法查看 UITableViewCell

自定义 uitableviewcell 在 LazyTableImages 中不起作用