我在委托方法中设置UITableViewCell
的宽度和高度,但是当我在cellForRowAtIndexPath
方法中检查单元格框时,它完全不同。以下是我的代码。我正在以编程方式做所有事情。
self.myTable = [[UITableView alloc] initWithFrame:CGRectMake(self.view.frame.size.width * 0.05,self.view.frame.size.height * 0.08,self.view.frame.size.width * 0.90,
(self.view.frame.size.height * 0.90) - tabBarHeight ) style:UITableViewStylePlain];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1.0;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 5;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if(indexPath.row == 0 || indexPath.row == 4){
return self.myTable.frame.size.height * 0.08;
}
return (self.myTable.frame.size.height * 0.28);
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(!cell){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
if(indexPath.row != 4){
cell.userInteractionEnabled = NO;
}
switch (indexPath.row) {
case 0:{
NSLog(@"0th cell Frame : %@", NSStringFromCGRect(cell.frame));
break;
}
case 1:{
NSLog(@"1st cell Frame : %@", NSStringFromCGRect(cell.frame));
break;
}
case 2:{
NSLog(@"2nd cell Frame : %@", NSStringFromCGRect(cell.frame));
break;
}
case 3:{
NSLog(@"3rd cell Frame : %@", NSStringFromCGRect(cell.frame));
break;
}
case 4:{
NSLog(@"4rth cell Frame : %@", NSStringFromCGRect(cell.frame));
break;
}
default:
break;
}
return cell;
}
我得到的单元格框架的输出是{{0, 0}, {320, 44}}
。但是这个细胞框架不正确。高度应为129
,宽度应为288
。有人可以指导我在这里做错了吗?
答案 0 :(得分:3)
但是,如果您仍需要您的单元格的给定(预定义)大小,您可以随时使用,
宽度,
对于自定义单元格的情况,您可以制作这样的方法,
- (CGFloat)cellWidth {
return [UIScreen mainScreen].bounds.size.width;
}
如果没有自定义单元格,您始终可以在创建
的同一个类中创建一个函数UITableView
,
- (CGFloat)cellWidth {
return yourTableView.frame.size.width;
}
将返回表格单元格的确切大小。 (我总是更喜欢第二种方法,因为有时你只是不创建设备宽度单元格!)
身高,
对于自定义单元格的情况,您可以创建这样的类方法,
+(CGFloat)myCellHeight {
return 45.f;
}
如果没有自定义单元格,您始终可以在创建
的同一个类中创建一个函数UITableView
,
-(CGFloat)myCellHeight {
return 45.f;
}
您可以在UIViewController
中使用,其中包含单元格名称(针对自定义单元格),[cellClassName myCellHeight]
或[self myCellHeight]
(UIViewController
中的默认单元格),表格{{ 1}}数据源方法。
这些方法可让您的细胞准确宽度/高度,随时随地! :)
答案 1 :(得分:1)
没什么,你的代码还可以。你的细胞将具有你想要的大小。问题是你的单元格在这个方法cellForRowAtIndexPath
中不知道它们的最终大小。他们认为,在这种方法中,它们具有默认大小。但在它们出现之前,它们将被重新调整大小。如果按代码定义单元格,则需要使用期望的de维度,这是tableView宽度和方法的高度(heightForCell或estimateHeightForCell)。你可以通过评论这一行来检查这一点,然后按下代表:(你也可以看到)。
要评论的行:
....
if(indexPath.row != 4){
// cell.userInteractionEnabled = NO;
}
.....
实施检查:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"cell pressed Frame : %@", NSStringFromCGRect(cell.bounds));
}
答案 2 :(得分:0)
- (void)viewDidLoad
{
self.myTable = [[UITableView alloc] initWithFrame:CGRectMake(self.view.frame.size.width * 0.05,self.view.frame.size.height * 0.08,self.view.frame.size.width * 0.90, // set the frame for your tableview
(self.view.frame.size.height * 0.90) - tabBarHeight ) style:UITableViewStylePlain];
self.myTable.delegate = self;
self.myTable.dataSource = self;
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}