1

ポップアップ メニューとして機能する があり、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 の幅を変更することに興味はありません。テーブルをロードしてから、適切な最大幅を計算してから、新しい適切な幅で再度リロードしても問題ありません。

4

1 に答える 1

1

これにアプローチする最良の方法は、別の角度からである可能性があります。textLabelは、含まれているテキストに基づいて展開されません。

self.menuItems配列をループして、NSStringに適用できる関数を呼び出す必要があります。

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

例えば

width = [menuItem sizeWithFont:font].width;

配列内で最も幅の広いタブを保持し、テーブルビューをその幅に設定します。フォントは、セルがラベルを描画しているフォントです。

于 2012-06-28T17:30:38.847 に答える