假设UITableViewCell的子类A有两种状态: 1.)显示一些标题(高度:0-50px) 2.)显示一些标题(高度:0-50px)+ UITableView(高度:50-150px)(均在子类UITableViewCell内)
A的一个细胞可以处于状态2,因此高度为200px。所有其他细胞处于状态1,因此高度为50px。
子类A使用IB实现,默认大小为200px。
管理UITableView的控制器可以保持哪个单元处于状态2。
问题:如何根据状态改变身高?
我确实按照以下方式实施heightForRowAtIndexPath
:
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
if (self.openTab && indexPath.row == self.openTab.row) {
return 200.0;
} else {
return 50.0;
}
}
它不起作用。
此外,我尝试在cellForRowAtIndexPath
中调整身高:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *CellIdentifier = @"conversationTableViewCell";
ConversationTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[self.tableView registerNib:[UINib nibWithNibName:@"ConversationTableViewCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
}
if (self.openTab && indexPath.row == self.openTab.row) {
CGRect frame = cell.contentView.bounds;
frame.size.height = 200.0;
cell.contentView.bounds = frame;
} else {
CGRect frame = cell.contentView.bounds;
frame.size.height = 50.0;
cell.contentView.bounds = frame;
}
return cell;
}
除了改变contentView边界的高度之外,我还将该想法直接应用于子类A中的框架和UITableView的边界/框架。我还体验了一些其他方法(参见注释部分)。什么都行不通。
有任何想法如何完成这项工作?
答案 0 :(得分:0)
如果条件合适,您的第一个代码必须有效。可能你忘记了
self.tableview.delegate = self
并且它没有通过此方法
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.delegate=self;
}
和你的代码:
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
if (self.openTab && indexPath.row == self.openTab.row) {
return 200.0;
} else {
return 50.0;
}
}
答案 1 :(得分:-1)
通过调整UITableView来解决这个问题,UITableView已经添加到子类A的contentView中,在layoutSubviews
中手动调整,如下所示:
- (void)layoutSubviews
{
[super layoutSubviews];
if (self.openTab) {
CGRect frame = self.tableView.frame;
frame.size.height = 150.0;
self.tableView.frame = frame;
} else {
CGRect frame = self.tableView.frame;
frame.size.height = 0;
self.tableView.frame = frame;
}
}
编辑:将视图(例如UITableView)以编程方式添加到UITableViewCell而不是使用IB以便能够更改它的大小也很重要。