这是它的长处和短处:
- 单元格宽度由其所在表格视图的宽度决定。
[编辑:如果它是分组表格视图,则单元格比表格视图宽度窄 20 - 60 像素,具体取决于您使用的是 iPhone 还是 iPad。]
- 您的单元格高度由以下因素决定
heightForRowAtIndexPath
method.
如果您手动设置单元格的框架,那么除非您使用子类单元格并希望根据单元格的尺寸添加子视图,否则它将毫无用处。
即使在这种情况下,建议使用以下方法从表格视图中获取单元格的框架rectForRowAtIndexPath:(NSIndexPath*)indexPath
方法,然后将该框架设置为单元格的框架(在将框架的原点 Y 设置为 0 后)。
我不太确定 UIToolBar,但是您的子视图的框架不会在更改单元格框架时发生变化。
也许如果您能告诉我们您想要实现什么目标,我们可以为您建议一个解决方案?
- - - - - - - - - - 编辑 - - - - - - - - - -
因此,您需要在点击单元格时动态地将子视图添加到单元格中,并根据新的子视图调整其高度。这会变得很麻烦,所以这里是:
在您的 .h 文件中声明:
BOOL subviewAdded;
在 .m 文件的 init 中,执行以下操作:
subviewAdded = NO;
假设您希望单元格的高度在没有子视图的情况下为 50,在有子视图的情况下为 100。因此,您的 heightForRow 方法应该是:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return (subviewAdded?100.0f:50.0f);
}
这意味着最初由于 subviewAdded 为 NO,所有单元格的高度都会较小。
现在,要在点击单元格时向单元格添加子视图,并动态更改其高度,请在 didSelectRow 方法中执行以下操作:
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the cell at this indexPath
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
if(subviewAdded)
{
subviewAdded = NO;
for(int i = 0; i < [thisCell.contentView.subviews count]; i++)
{
UIView *thisSubview = [thisCell.contentView.subviews objectAtIndex:i];
[thisSubview removeFromSuperview];
}
}
else
{
UIView *someView = [[UIView alloc] initWithFrame:someFrame];
[thisCell.contentView addSubview:someView];
[someView release];
subviewAdded = YES;
}
NSMutableArray *array = [NSMutableArray array];
[array addObject:indexPath];
[tableView reloadRowsAtIndexPaths:array
withRowAnimation:UITableViewRowAnimationFade];
}
因此,这里将发生的事情是向您点击的单元格添加一个子视图。重新加载此单元格将调用heightForRowAtIndexPath
并做一个漂亮的小淡入淡出动画并改变你的桌面视图高度。
重要提示:理想情况下,您应该维护一个带有布尔值的 NSNumber 数组。数组大小应该与您拥有的表格视图单元格的数量相同。
在 heightForRow 中,您将检查该数组,而不是对整个 tableView 使用单个布尔值。这将确保不同的单元格可以具有不同的高度。
那看起来像:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {
BOOL thisBool = (BOOL)[[booleanArray objectAtIndex:indexPath.row] boolValue];
return (thisBool?100.0f:50.0f);
}
我没有在这里发布所有代码,因为它是隐含的,我发布的内容应该可以帮助您很好地完成布尔数组的工作。
无论如何,你就在那里。我刚刚自己测试了这段代码,所以它有效:)