2013-02-09 4 views
5

У меня есть три UILabels в моем обычном UITableViewCell. Это может быть, что некоторые UILabels будут пустыми (label.text == @"")Auto Layout UILabels

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"EventCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


     NSString *key = [[keysArray objectAtIndex:indexPath.section] description]; 

     UILabel *nameLabel = (UILabel *)[cell viewWithTag:100]; 
     namelabel.text = @"Label 1"; 

     UILabel *locationLabel = (UILabel *)[cell viewWithTag:101]; 
     location.text = @"Label 2"; 

     UILabel *timeLabel = (UILabel *)[cell viewWithTag:102]; 
     timeLabel.text = @""; 

     return cell; 
} 

Как центрировать все непустая UILabels вертикально в камере с помощью авто-макет?

Вот как это выглядит с тремя метками

This is how it looks with three labels:

Как это выглядит, когда один из UILables пуст

How it looks when one of <code>UILables</code> is empty

И это, как я хочу это посмотреть:

And this is how I want it to look:

+0

Вы строите ячейку в коде или в построителе интерфейса? Почему имеет значение, если метки пусты или нет? – jrturton

+0

В IB. Я хочу, чтобы мои ярлыки располагались в контейнере. Это непросто сделать, но когда одна из ярлыков пуста, я получаю разрыв между двумя другими ярлыками, которые выглядят не очень хорошо. – Oleg

+1

Это может быть очень сложно, потому что пустой UILabel, возможно, не требует ширины, но, конечно, высоты, поэтому вам, возможно, придется написать код по строкам 'одного из ярлыков пустым, удалите эту метку'. – 11684

ответ

3

Это сложно достичь, но простой ярлык может быть, чтобы иметь одну метку, а не с тремя строками текста, стесненных, чтобы заполнить всю высоту ячейки. Затем этикетка будет автоматически центрировать свое содержимое по вертикали.

У вас будет три свойства строки в ячейке вместо трех меток, и ваши сеттеры будут строить финальную строку (используя \n для новых строк) и установить текст метки.

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

+0

Очень хороший подход! Похоже, вы предлагаете. И будет использовать атрибутированные строки, потому что мои ярлыки имеют разные стили! Спасибо! – Oleg

+0

На самом деле я думал, что кто-то предложит программно добавить/изменить ограничения, но это решение намного проще! – Oleg

+0

Изменение ограничений возможно, но, конечно, сложнее, чем делать это таким образом. Это может также повлиять на производительность прокрутки, так как вы добавляете/удаляете subviews или меняете макет, поскольку каждая ячейка появляется на экране, оба из которых являются дорогостоящими операциями. – jrturton