调整UITableView的宽度,基于宽度最长的UITableViewCell

时间:2012-06-28 17:08:15

标签: iphone ios cocoa-touch uitableview

我有UITableView作为弹出菜单,我想将其宽度设置为其最宽UITableViewCell的宽度。但是,我已经尝试获取单元格UILabel / contentView的宽度,并且它总是返回0.我尝试在添加到子视图之后并且在重新加载表之后执行此操作同样的结果。我已经在tableView:cellForRowAtIndexPath:方法中完成了它,并且在它之外和相同的结果。是否有可能做到这一点?我的代码如下:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *cellIdentifier = @"Cell";

    UITableViewCell *tableViewCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (tableViewCell == nil) 
    {
        tableViewCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
    }

    [[tableViewCell textLabel] setFont:[UIFont fontWithName: @"Helvetica-Bold" size: 17]];
    [[tableViewCell textLabel] setText: [self.menuItems objectAtIndex:0]];
    [[tableViewCell imageView] setImage: [self.menuItems objectAtIndex:1]];

    if (tableViewCell.textLabel.frame.size.width > tableView.frame.size.width)
    {
        CGRect tableViewFrame = tableView.frame;
        tableViewFrame.size.width = tableViewCell.textLabel.frame.size.width;
        tableView.frame = tableViewFrame;
    }

    return tableViewCell;
}

更新:只是为了澄清,我对TableView重新加载时更改TableViewCell的宽度不感兴趣。我可以加载表格,然后计算适当的最大宽度,然后用新的适当宽度重新加载它。

1 个答案:

答案 0 :(得分:1)

解决这个问题的最佳方法可能是另一个角度。 textLabel不会根据其包含的文本进行扩展。

你应该遍历self.menuItems数组并调用可以应用于NSString的函数。

- (CGSize)sizeWithFont:(UIFont *)font;

e.g。

width = [menuItem sizeWithFont:font].width;

保持数组中最宽的宽度,并将tableview设置为该宽度。字体是您的单元格在其中绘制标签的任何字体。