我有这个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;
}
答案 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];
}