滚动前UITableView错误的单元格大小?

时间:2014-12-07 17:11:00

标签: ios objective-c uitableview

我有这个UITableView,用代码制作,当我第一次看到它时,我读的单元格大小是错误的 - 因此单元格上的图标计算错误且非常小。

当我开始滚动时,我滚动的每个单元格,它的图标(在这个单元格上)变得更大并且得到正确的尺寸,我也看到了小图标,所以我对每个单元格都有一个小图标和一个大图标,我应该只有大。

为什么会这样? (这个视图里面也有一些集合视图)

      //tabel view
        frm.origin.y=self.frame.size.height-openY;
        tableView = [[UITableView alloc]initWithFrame:frm style:UITableViewStylePlain];
        tableView.delegate=self;
        tableView.dataSource=self;
        [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
        [self  addSubview:tableView];

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return  [actionsMenus count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     return self.frame.size.height/5.0;
}

- (UITableViewCell *)tableView:(UITableView *)ttableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *simpleTableIdentifier = @"Cell";
    UITableViewCell *tcell=  [ttableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    NSLog(@"%f", tcell.frame.size.height );

    if (tcell == nil)
    {
        tcell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

     NSString *kind=[actionsMenus objectAtIndex:indexPath.row];
     NSString *icon=[NSString stringWithFormat:@"%@%d.png",kind,colorIndex];

    //icon
    UIImage *image=[UIImage imageNamed:icon];
    UIImageView *view=[[UIImageView alloc] initWithFrame:CGRectMake(tcell.frame.size.width/2.0-0.8*tcell.frame.size.height/2.0, 0, 0.8*tcell.frame.size.height,0.8*tcell.frame.size.height)];
    view.image=image;
    [tcell addSubview:view];

    return tcell;
}

1 个答案:

答案 0 :(得分:2)

如果您在viewDidLoad中创建表,我认为在视图的自动布局完成之前调用UITableView委托方法;所以将heightForRowAtIndexPath:设置为

return self.frame.size.height/5.0;

使用视图 pre -auto-layout的框架来计算行高。如果您绝对需要heightForRowAtIndexPath:依赖于视图的高度,可以在视图的布局完成后将表添加为子视图。例如,不要在viewDidLoad中添加,而是将其添加到viewDidLayoutSubviews,例如:

- (void) viewDidLayoutSubviews {
    //table view
    frm.origin.y=self.frame.size.height-openY;
    tableView = [[UITableView alloc]initWithFrame:frm style:UITableViewStylePlain];
    tableView.delegate=self;
    tableView.dataSource=self;
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    [self addSubview:tableView];
}