0

テキストが含まれるテーブル ビューのヘッダーよりも長いラベルがあるため、利用可能な幅に応じてラベルを N 行に分割したいと考えています。これは私のコードです:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
  if (section == 1) {
    UIView *wrapper = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 100)];
    [wrapper setBackgroundColor:[UIColor clearColor]];

    UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 100)];
    textLabel.text = NSLocalizedString(@"This is supposed to be a very long text that may fill several lines", @"");
    [textLabel setLineBreakMode:UILineBreakModeWordWrap];
    [textLabel setNumberOfLines:0];
    [wrapper addSubview:textLabel];

    return wrapper;
  }
  else
    return nil;
}

しかし、ラベルが一行になっていて、文末が見えません。私は何が欠けていますか?

ありがとう!

4

6 に答える 6

0
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
  if (section == 1) {

  NSString *text = NSLocalizedString(@"This is supposed to be a very long text that may fill several lines", @"");;

    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:10] constrainedToSize:CGSizeMake(self.tableView.frame.size.width, 999) lineBreakMode:NSLineBreakByWordWrapping];
    CGRect frame = CGRectZero;
    frame.size = size;

    UIView *wrapper = [[UIView alloc] initWithFrame:frame];
    [wrapper setBackgroundColor:[UIColor clearColor]];

    UILabel *textLabel = [[UILabel alloc] initWithFrame:frame];
    textLabel.text = NSLocalizedString(@"This is supposed to be a very long text that may fill several lines", @"");
    [textLabel setLineBreakMode:UILineBreakModeWordWrap];
    [textLabel setNumberOfLines:0];
    [wrapper addSubview:textLabel];

    return wrapper;
  }
  else
    return nil;
}
于 2013-06-22T18:15:19.490 に答える
0

デリゲート メソッドを実装する必要がありますheightForHeaderInSection

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section ==1)
        return 100;
    else
        return 0;    
}
于 2013-06-22T17:56:47.003 に答える
0

おそらくどこかからデフォルトを継承しているため、ヘッダービュー内のラベルではラッピング/フォーマットが機能しないようです。したがって、AFAIKが法律に違反していない簡単な解決策は、ヘッダービュー内のビュー内にラベルを配置することです。

ストーリーボードを使用して、ビューをテーブル ビュー コントローラー (プロトタイプ セルの上) にドラッグします。
このビューに 2 つ目のビューを追加します。 この 2 番目のビューにラベルを追加します。ビューとラベルの両方が、複数行のテキストを許容するのに十分な高さであることを確認してください。ラベルの属性で、Lines を 0 に、Line Breaks を Word Wrap に設定します。ラッピングが期待どおりに機能するようになりました。

于 2014-05-02T17:22:01.957 に答える