我正在试图弄清楚如何将子视图放置到具有居中位置的自定义UITableViewCell。如文档(Customizing Cells)中所述,应该“...将子视图添加到单元格对象的contentView属性或...”。我注意到它与UITableViewStylePlain一起工作正常。在UITableViewStyleGrouped表中,子视图不能居中放置。他们转移到右手边。
如果子视图直接添加到UITableViewCell,则两种模式都可以。如果我将UITableViewCell子类化并从XIB加载单元格,也是如此。
不幸的是,我无法上传截图。有人可以帮忙解决这个问题吗?或者我错过了一些重要的东西,因为错位似乎与分组表中要收缩的维度相匹配。
非常感谢, 埃尔
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier1 = @"AddToCell";
static NSString *cellIdentifier2 = @"AddToContentView";
static NSString *aVeryLongLine = @"---------------------------------------------";
UITableViewCell *cell = nil;
if (indexPath.section == 0) {
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier1];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier1] autorelease];
CGRect frame = cell.frame;
CGRect labelFrame = CGRectMake((frame.size.width-270)/2, (frame.size.height-40)/2, 270, 40);
UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];
label.textAlignment = UITextAlignmentCenter;
label.text = aVeryLongLine;
[cell addSubview:label];
[label release];
}
}
else if (indexPath.section == 1) {
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier2];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier2] autorelease];
CGRect frame = cell.contentView.frame;
CGRect labelFrame = CGRectMake((frame.size.width-270)/2, (frame.size.height-40)/2, 270, 40);
UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];
label.textAlignment = UITextAlignmentCenter;
label.text = aVeryLongLine;
[cell.contentView addSubview:label];
[label release];
}
}
else {
}
return cell;
}
答案 0 :(得分:1)
UITableViewCell
的实例在多种情况下调整其内容视图的大小(例如,临时添加删除按钮以允许用户删除行时)。
当单元格在分组样式表视图中显示时,它们会调整大小以在单元格与表格视图的左右边缘之间提供边距。因此,为了使您的子视图保持正确定位,您需要适当地设置其自动调整蒙版,如下所示:
mySubview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
(或
[mySubview setAutoresizingMask:(UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin)];
对于那些喜欢旧语法的人来说。)
答案 1 :(得分:0)
您是否检查了来自cell.contentView.frame或cell.frame的帧的值?
当使用样式和标识初始化单元格时,它的帧值可能有一个CGZeroRect。