我在我的项目中使用GMGridView
。在- (GMGridViewCell *)GMGridView:(GMGridView *)gridView cellForItemAtIndex:(NSInteger)index
方法中,我写了一个超出我期望的片段。摘录如下:
if (!cell)
{
cell = [[GMGridViewCell alloc] init];
ThumbImageView *view = [[ThumbImageView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];
[view setBackgroundColor:DEFAULT_BACKGROUND_COLOR];
[view setImage:[UIImage imageWithContentsOfFile:path]];
view.userInteractionEnabled = YES;
view.layer.shadowOffset = CGSizeMake(8, 8);
view.layer.shadowOpacity = 0.5;
NSLog(@"view frame width:%f,height:%f",view.frame.size.width,view.frame.size.height);
cell.contentView = view;
NSLog(@"cell.contentView frame width:%f,height:%f",cell.contentView.frame.size.width,cell.contentView.frame.size.height);
}
运行时输出如下:
2013-06-03 11:02:05.508 XXX[71692:707] view frame width:115.000000,height:180.000000
2013-06-03 11:02:05.511 XXX[71692:707] cell.contentView frame width:0.000000,height:0.000000
为什么将视图分配给cell.contentView,cell.contentView.frame.size仍为零?而且cell.contentView可以正确显示图像。什么原因?我完全糊涂了:(。
答案 0 :(得分:2)
检查the docs:
<强>内容查看强>
返回单元格对象的内容视图。 (只读)
@property(nonatomic, readonly, retain) UIView *contentView
contentView是一个只读属性。你无法分配它。
答案 1 :(得分:0)
问题可能是您已经创建了新视图,并且在运行循环达到其布局阶段之前,您正在查看其中一个视图的框架。
创建GMGridViewCell
时,它会以frame
的默认bounds
和CGRectZero
开头。设置内容视图时,会将内容视图的frame
设置为其(单元格)bounds
。因此,即使您使用initWithFrame:
直接设置内容视图的框架,当您将视图设置为单元格的内容视图时,框架也会更改为CGRectZero
。
由于单元格不是网格视图的子视图,因此在您尝试记录内容视图的框架时,无法要求网格视图布置单元格。如果网格视图对所有单元格使用恒定大小,并且您知道该大小是什么,则可以在设置单元格的内容视图之前手动将单元格设置为该大小。否则,您需要等到网格视图的layoutSubviews
方法运行后才检查内容视图的框架。