-2

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 也可以正确显示图像。什么原因?我完全糊涂了:(。

4

2 回答 2

3

检查文档

内容视图

返回单元格对象的内容视图。(只读)

@property(nonatomic, readonly, retain) UIView *contentView

contentView 是一个只读属性。你不能分配它。

于 2013-06-03T03:32:52.453 回答
0

问题可能是您创建了新视图,并且在运行循环到达其布局阶段之前,您正在查看其中一个视图的框架。

创建 时GMGridViewCell,它以默认值和frame开头boundsCGRectZero当您设置其内容视图时,它将内容视图设置frame为其 (单元格) bounds。因此,即使您直接使用 设置内容视图的框架,当您将视图设置为单元格的内容视图时initWithFrame:,框架也会更改。CGRectZero

由于单元格还不是网格视图的子视图,因此在您尝试记录内容视图的框架时,无法要求网格视图布置单元格。如果网格视图对所有单元格使用恒定大小,并且您知道该大小是多少,则可以在设置单元格的内容视图之前手动将单元格设置为该大小。否则,您需要等到网格视图的layoutSubviews方法运行后检查内容视图的框架。

于 2013-06-03T04:02:21.053 回答