作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在覆盖我的 UITableViewCell 子类中的 layoutSubviews。我注意到每个单元格都调用了 layoutSubviews 两次。在第二次调用时,内容 View 框架高度比第一次调用时的高度小 1:
@implementation MyUITableViewCellCell
+ (NSString *)asString:(CGRect) rect {
NSString *res = [[NSString alloc] initWithFormat:@"[%f %f %f %f]",
rect.origin.x, rect.origin.y, rect.size.width, rect.size.height];
[res autorelease];
return res;
}
- (void)layoutSubviews
{
[super layoutSubviews];
NSLog(@"Here I am %@ frame=%@ cvframe=%@,
self.text,
[MyUITableViewCellCell asString:self.frame],
[MyUITableViewCellCell asString:self.contentView.frame]);
}
@end
Controller 创建表格单元格的方式如下:
- (NSString*)dataAtIndex:(NSInteger)index
{
NSString* data = [[NSString alloc] initWithFormat:@"Row %d", index];
return [data autorelease];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 30;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Alex";
NSInteger index = [indexPath row];
MyUITableViewCellCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyUITableViewCellCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.text = [self dataAtIndex:index];
return cell;
}
输出:
Here I am Row 0 frame=[0.000000 0.000000 320.000000 30.000000] cvframe=[0.000000 0.000000 320.000000 30.000000]
Here I am Row 1 frame=[0.000000 30.000000 320.000000 30.000000] cvframe=[0.000000 0.000000 320.000000 30.000000]
Here I am Row 0 frame=[0.000000 0.000000 320.000000 30.000000] cvframe=[0.000000 0.000000 320.000000 29.000000]
Here I am Row 1 frame=[0.000000 30.000000 320.000000 30.000000] cvframe=[0.000000 0.000000 320.000000 29.000000]
是否预期每个单元有 2 个调用,还是我做错了什么?
最佳答案
我的猜测是 UITableView
将单元格的高度调整了一个像素,以便为绘制分界线腾出空间。在 UITableView
为单元格设置新框架后,您的 layoutSubviews
方法再次被调用。
关于ios - layoutSubviews 在 UITableViewCell 上调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11547100/
我是一名优秀的程序员,十分优秀!