我有一个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/