2015-12-11 4 views
0

Я знаю, как выровнять текст в UILabel. Но эта проблема немного связана. Все остальные работы выравнивания, такие как NSTextAlignmentJustified, NSTextAlignmentNatural. Только NSTextAlignmentCenter не работает, чтобы сделать текст в центре. Мой UILabel вставлен с помощью StoryBoard. Затем форматирование текста в UILabel реализован в программе, какTextAlignment at UILabel

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 

    CustomCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath]; 
    CGRect frame = cell.cellText.frame; 
    frame.size.width = cell.bounds.size.width; 
    frame.size.height = cell.bounds.size.height; 
    cell.cellText.frame = frame; 
    cell.cellText.font = [UIFont fontWithName:@"ArialMT" size:screenRect.size.height*0.0163]; 
    cell.cellText.textAlignment = NSTextAlignmentCenter; 
    cell.cellText.lineBreakMode = NSLineBreakByWordWrapping; 
    cell.cellText.numberOfLines = 0; 
    cell.cellText.clipsToBounds = YES; 
    cell.cellText.backgroundColor = [UIColor clearColor]; 
    cell.cellText.textColor = [UIColor blackColor]; 



    if(indexPath.section == 0){ 
     cell.backgroundColor=[UIColor blackColor]; 
     cell.cellText.textColor = [UIColor whiteColor]; 
     if(indexPath.item == 0) 
      cell.cellText.text = @"Date"; 
     else if(indexPath.item == 1) 
      cell.cellText.text = @"Age"; 
     else if(indexPath.item == 2) 
      cell.cellText.text = @"Height (cm)"; 
     else if(indexPath.item == 3) 
      cell.cellText.text = @"%le"; 
     else if(indexPath.item == 4) 
      cell.cellText.text = @"Weight (kg)"; 
     else if(indexPath.item == 5) 
      cell.cellText.text = @"%le"; 
    } 
    else if(indexPath.section % 2 == 0 && indexPath.section != 0) 
     cell.backgroundColor=[UIColor grayColor]; 
    else 
     cell.backgroundColor=[UIColor lightGrayColor]; 



    return cell; 


} 

Почему нельзя выровнять по центру, как показано на рисунке. enter image description here

EDIT: Я изменил фон в UILabel как

if(indexPath.section == 0){ 
     cell.backgroundColor=[UIColor blackColor]; 
     cell.cellText.textColor = [UIColor whiteColor]; 
     cell.cellText.backgroundColor = [UIColor redColor]; 
     if(indexPath.item == 0) 
      cell.cellText.text = @"Date"; 
     else if(indexPath.item == 1) 
      cell.cellText.text = @"Age"; 
     else if(indexPath.item == 2) 
      cell.cellText.text = @"Height (cm)"; 
     else if(indexPath.item == 3) 
      cell.cellText.text = @"%le"; 
     else if(indexPath.item == 4) 
      cell.cellText.text = @"Weight (kg)"; 
     else if(indexPath.item == 5) 
      cell.cellText.text = @"%le"; 
    } 

Обновленная картинка enter image description here

+0

вы можете попытаться установить цвет фона Текст_ячейки на красный или Буле, чтобы увидеть это кадр? –

+0

проверить, что ваш фрейм этикетки в соответствии с @CongTran - комментарий полезен для вас –

+0

@Cong Tran, я обновил в Редактировать, спасибо – batuman

ответ

1

Не используйте рамку для установки положения cellText. Ячейка не была выложена в collectionView:cellForItemAtIndexPath, поэтому рамка будет неправильной. Весьма правдоподобно, что кадр будет кадром последнего времени, когда ячейка была повторно использована.

Вместо этого используйте AutoLayout, чтобы ограничить UILabel ко всем краям ячейки.

+0

Да, это имеет смысл. Спасибо – batuman

1

Заменить эти строки

CGRect frame = cell.cellText.frame; 
frame.size.width = cell.bounds.size.width; 
frame.size.height = cell.bounds.size.height; 
cell.cellText.frame = frame; 

С помощью этого кода.

cell.cellText.center = cell.center; 
CGRect frame = cell.cellText.frame; 
frame.size.width = cell.bounds.size.width; 
frame.size.height = cell.bounds.size.height; 
cell.cellText.frame = frame; 

Если вы хотите использовать автозапуск, просто добавьте два ограничения на две метки.

  • Центр вертикально в контейнере.
  • Центр горизонтально в контейнере.

enter image description here

+0

Чтобы добавить к вашим ограничениям, если вместо этого вы прикрепляете ярлык к краям, внутренний размер содержимого метки позволит авторизовать ячейки (с предполагаемым размером элемента на макете). Если это желательно (т. Е. Вы хотите, чтобы ячейка увеличивалась по отношению к метке названия), тогда это может быть способ пойти. –