Как повернуть viewForHeaderInSection - PullRequest
0 голосов
/ 30 марта 2011

UITableView имеет пользовательский заголовок UIView , который содержит UILabel. Так как в таблице также есть индекс раздела с правой стороны, я хочу расположить метку в оставшемся месте.

enter image description here

Проблема в том, как «центрировать» метку таким же образом, когда устройство повернуто в горизонтальное положение! Я пробовал и Interface Builder, и только код, и что-то всегда не так.

Ограничения:

  1. Метка максимально узкая
  2. Метка не должна быть изменена
  3. Метка всегда должна быть в центре ширины таблицы минус индекс секции

Одним из простых способов исправить это было бы отключение представления заголовка раздела от правой части tableView. Пытался это сделать, не получилось. Вот код из viewForHeaderInSection :

CGRect frame = CGRectMake(0, 0, tableView.bounds.size.width - 32, 50.0f);
// MAGIC 32 for SectionIndexTitles

UIView *view = [[[UIView alloc] initWithFrame:frame] autorelease];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.font = [UIFont fontWithName:@"Courier" size:20];
label.text = @"Section title long";
label.textAlignment = UITextAlignmentCenter;
label.backgroundColor = [UIColor redColor];

CGSize labelSize = [label.text sizeWithFont:label.font
                          constrainedToSize:frame.size
                              lineBreakMode:UILineBreakModeClip];
label.frame = CGRectMake(0, 0, labelSize.width, labelSize.height);
label.center = CGPointMake(frame.size.width/2.0f, kHeaderHeight/2.0f);

label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

Любые идеи приветствуются! Даже не могу вспомнить, сколько разных способов мне не удалось:)

1 Ответ

0 голосов
/ 30 марта 2011

Эй, установите в IB следующее: Отключите все функции автоматического изменения размера (без гибкой ширины, высоты и слева, снизу, сверху, справа).

Должен делать работу:)

Чтобы поддерживать магию 32 пикселей, попытайтесь расположить свою метку так, как вам нужно. Это означает: Поместите его в центр вашего UIView и переместите на 16 пикселей влево, теперь не меняйте рамку программно, иначе «чудесным» автоматическим позиционированием будет манипулировать то, что мы на самом деле не хотим:)

...