2013-10-12 4 views
0

Я пытаюсь добавить вторичную (обычную) метку ниже стандартного textLabel UITableViewCell.Как получить размер по умолчанию textLabel внутри UITableViewCell в iOS?

Я хочу правильно установить рамку, которая должна быть действительно ниже textLabel. Однако все значения возвращают 0, поэтому я не могу правильно подготовить кадр пользовательского представления.

в

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

NSLog(@"%f, %f, %f, %f", cell.textLabel.frame.origin.x,cell.textLabel.frame.origin.y,cell.textLabel.frame.size.height,cell.textLabel.frame.size.width);

печатает

0.000000, 0.000000, 0.000000, 0.000000

Как я могу получить правильный х и у для моего пользовательского вторичного зрения описания? (Я знаю, что UITableViewCell есть шаблон, подобный этому, но я не хочу, чтобы использовать шаблон представления подробно)

+1

Добавить Две пользовательские метки InPlace по умолчанию cell.textlabel –

ответ

0

Размер по умолчанию является [ячейка labelsize = 15 0 43,5 270]

Вы не будете получить размер textLabel, когда cell = nil. Перетащите верхний стол вверх &, затем проверьте журналы. Вы найдете эти значения.

Но если вы хотите использовать две метки, используйте этот код. Это просто.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     UITableViewCell *cell =[ tableView dequeueReusableCellWithIdentifier:@"cell"]; 
     UILabel * invoiceTitle; 
     UILabel * projectTitle; 

     if(cell==nil) 
     { 
      cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease]; 

      invoiceTitle  = [[UILabel alloc]initWithFrame:CGRectMake(14, 0, cell.contentView.frame.size.width, cell.contentView.frame.size.height/2)]; 
      [invoiceTitle setTag:111]; 
      [cell.contentView addSubview:invoiceTitle]; 
      [invoiceTitle release]; 

      projectTitle  = [[UILabel alloc]initWithFrame:CGRectMake(14, cell.contentView.frame.size.height/2 + 1, cell.contentView.frame.size.width - cell.contentView.frame.size.height/2]; 
      [projectTitle setTag:222]; 
      [cell.contentView addSubview:projectTitle]; 
      [projectTitle release]; 
     } 
     else 
     { 

      invoiceTitle = (UILabel *)[cell.contentView viewWithTag:111]; 
      projectTitle = (UILabel *)[cell.contentView viewWithTag:222]; 
     } 

     [projectTitle setText:LOCAL(@"Title1")]; 
     [invoiceTitle setText:@"Title2"]; 

     return cell; 
    } 

Счастливый кодирования ...

+0

Я пытаюсь получить размер TextLabel после выделения и установки «ячейки». Это не дает размер. Значит, вы имеете в виду, что я должен полностью отказаться от использования textLabel по умолчанию и «также» заменить его на пользовательскую основную метку. Правильно? – frankish

+1

Точно, я сделал это во многих проектах. Это хороший способ делать обычай. Потому что использование textLabel по умолчанию сделает ваши вещи хуже. Как обертывание одной этикетки над другой и т. Д. И т. Д. Пожалуйста, примите ответ, если это вам поможет. –

+0

Размер по умолчанию textLabel по умолчанию UITableViewCell правильный, но только для iOS 7. На iOS 6 ширина textLabel составляет 280, а origin.x - 15. Вам необходимо принять меры предосторожности для iOS 7 и ранее. –

1

Вы можете, вероятно, не получите размеры в камере сразу после загрузки. Первоначально cellForRowAtIndexPath: даст вам нулевые значения. Вы должны либо прокрутить страницу или вызвать метод [tableView reload]. Это снова вызовет cellForRowAtIndexPath: с новыми значениями. Происхождение кадров будет отличаться, но размеры должны быть одинаковыми. Я использовал эту технику для получения размеров detailTextLabel.frame. Вот мой пример, и как я получил размеры:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ...... 
    NSLog(@“detailCell frame is %@”, NSStringFromCGRect(cell.detailTextLabel.frame)); 
    ...... 
} 

удачи

Смежные вопросы