分组表视图的标题中的UILabel不会换行文本

时间:2013-06-22 17:49:22

标签: iphone ios uitableview uilabel word-wrap

我有一个标签,其文本比包含它的表视图的标题长,所以我希望根据可用的宽度将标签分成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;
}

但是,标签在一行中,我看不到文本的结尾。我错过了什么?

谢谢!

6 个答案:

答案 0 :(得分:0)

您应该实现委托方法heightForHeaderInSection

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section ==1)
        return 100;
    else
        return 0;    
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

如果您想支持iOS 6.0以下,请使用此

textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;

现在不推荐使用UILineBreakModeWordWrap。

否则使用此

textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;

答案 3 :(得分:0)

您应该将标签的大小设置为heightForRowAtIndexPath

中的文本
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *text;
    CGSize textViewSize;
    int width = 270;
    textViewSize = [text sizeWithFont:[UIFont fontWithName:@"Helvetica Neue" size:14.0]
                    constrainedToSize:CGSizeMake(width, FLT_MAX)
                        lineBreakMode:UILineBreakModeCharacterWrap];
    CGFloat height = MAX(textViewSize.height, 44.0f);
    return height;

}

并在cellForRowAtIndexPath中写这个

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    textViewSize = [text sizeWithFont:[UIFont fontWithName:@"Helvetica Neue" size:14.0]
                    constrainedToSize:CGSizeMake(width, FLT_MAX)
                        lineBreakMode:UILineBreakModeCharacterWrap];
    //  /  CGFloat height = MAX(textViewSize.height, 44.0f);

    //    if (!lblParameter){
    //        lblParameter = (UILabel*)[cell viewWithTag:1];}
    CGFloat height = MAX(textViewSize.height, 44.0f);
    [lblParameter setText:text];
    [lblParameter setFont:[UIFont fontWithName:@"Helvetica Neue" size:14.0]];
    [lblParameter setFrame:CGRectMake(10, 0,width,height)];
    [[cell contentView] addSubview:lblParameter];

}

答案 4 :(得分:0)

你需要计算uilabel的高度,这个高度等于字体大小* numberline

答案 5 :(得分:0)

包装/格式化似乎不适用于标题视图中的标签 - 可能是因为它从某个地方继承了默认值。因此,一个简单的解决方案,AFAIK没有违法,是将标签放在标题视图内的视图中。

使用情节提要,将视图拖动到表格视图控制器(原型单元格上方) 向此视图添加第二个视图。 将标签添加到第二个视图。确保视图和标签都足够高,以允许多行文本。在标签的属性中,将Lines设置为0,将Line Breaks设置为Word Wrap。 现在,包装将按预期工作。