在分组TableView中将UITableViewCell中的子视图居中

时间:2010-09-11 11:57:45

标签: iphone cocoa-touch uitableview

我正在试图弄清楚如何将子视图放置到具有居中位置的自定义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;

}

2 个答案:

答案 0 :(得分:1)

UITableViewCell的实例在多种情况下调整其内容视图的大小(例如,临时添加删除按钮以允许用户删除行时)。

当单元格在分组样式表视图中显示时,它们会调整大小以在单元格与表格视图的左右边缘之间提供边距。因此,为了使您的子视图保持正确定位,您需要适当地设置其自动调整蒙版,如下所示:

mySubview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

(或

[mySubview setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | 
                                UIViewAutoresizingFlexibleLeftMargin |
                                UIViewAutoresizingFlexibleRightMargin)];

对于那些喜欢旧语法的人来说。)

答案 1 :(得分:0)

您是否检查了来自cell.contentView.frame或cell.frame的帧的值?

当使用样式和标识初始化单元格时,它的帧值可能有一个CGZeroRect。