使用自定义 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:
,它也不会返回任何帧大小,因为尚未加载单元格,这意味着尚未创建subview
s(即nil
)。在-layoutSubviews
中使用特定于框架的相关内容会更好,至于设置图像属性,我会在-awakeFromNib
中进行
顺便说一句...我不完全确定你的问题的细节,所以我只是把它放在那里(虽然你看起来应该知道)但是您必须手动将UIImageView
对象拖到您的自定义UITableViewCell
上。自定义 UITableViewCell 中没有标准的UIImageView
【参考方案1】:
-initWithStyle:reuseIdentifier:
中不会有任何帧大小,因为尚未加载单元格,这意味着尚未创建 subview
s(即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的区别(转载)