我创建了一个自定义的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;
}
答案 0 :(得分:1)
您在-initWithStyle:reuseIdentifier:
中无法获得任何帧大小,因为尚未加载单元格,这意味着尚未创建subview
天堂(即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"]];
}
答案 1 :(得分:1)
似乎问题是当使用重用标识符和索引路径对自定义单元格进行出列时,自定义单元格基类不会设置这些属性。在文档中没有提到这是非常不幸的。