2012-02-09 13 views
2

私は基本的な文字列を持つセルを持つUITableViewを持っています。現時点では、私のテーブルのフレームを幅400に設定するのは難しいです。行内の最も長い単語に基づいてフレームを調整する方法があれば、私は疑問に思っていました。セルのtextLabel値を取得しようとしましたが、常にnullを返しています。私は助けをオンラインで検索しようとしましたが、私は高さの変更についての参考文献しか見ませんでした。iOS UITableView動的な幅

アドバイスをいただければ幸いです。

答えて

1

データソース(通常はUITableViewController)は、UITableViewに提供する文字列の最大幅を計算するものです。その時点で、データソースはUITableViewのフレームを変更できます。これにより、UITableViewのリロードメカニズムがアクティブになります。 NSString UIKit Additionsのおかげで、文字列の最大幅を計算するのは簡単です。また、最大幅(400を指定)を指定して、テーブルの幅に制限を設定するように注意してください。

CGFloat maxWidth = 0.0; 
    CGSize maxSize = CGSizeMake(400,99999); 
    CGFloat cellIndent = 0; //Use this to account for any cell indenting 
    for(NSString * text in datasource.array){ 

     CGSize textSize = [text sizeWithFont:yourFont 
             constrainedToSize:maxSize 
             lineBreakMode:UILineBreakModeWordWrap]; 

     maxWidth = MAX(maxWidth,textSize.width + 2.0*cellIndent); 
    } 

    //Now change the tableView's frame 
    CGRect newFrame = tableView.frame; 
    newFrame.size.width = maxWidth; 
    tableView.frame = newFrame; 

    //I don't believe a table reload is necessary let me know 
    [tableView reloadData]; 

また、幅を変更した後にテーブルビューをどのように配置するかについて考える必要があります。フレームの原点は変更されていないので、テーブルビューの左上隅は同じ位置にとどまりますが、右に向かって拡大します。

+0

フォントと改行をテーブルからどのように取得できますか?私はUITableViewCellStyleDefaultを使用してセルを設定するので質問します – Seb

+0

この[link](http://stackoverflow.com/questions/4775107/uitableviewcellstylesubtitle-font-size)は、UIFontが何であるかについての非常に良い推測を示していますが、あなたが確かに知っているように、特に私の表のセルのためのUIFontを設定します。私は、デフォルトのテーブルセルのデフォルトの改行モードがUILineBreakModeTailTruncationであることを確信しています。 –

関連する問題