我有一个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的宽度不感兴趣。我可以先加载表格,然后计算适当的最大宽度,然后再次使用新的适当宽度重新加载它。

最佳答案

解决此问题的最佳方法可能是从另一个角度来看。 textLabel不会根据其包含的文本展开。

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

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


例如

width = [menuItem sizeWithFont:font].width;


保持数组中宽度最大的选项卡,并将tableview设置为该宽度。字体是您的单元格绘制标签时使用的任何字体。

关于iphone - 根据最长的UITableViewCell调整UITableView的宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11249619/

10-10 21:14
查看更多