При использовании Autosizing в раскадровке iOS, как гарантировать, что ячейки UITableView не будут частичными

У меня есть представление таблицы с высотой строки 33 и высотой 363. При отображении на iPhone 5 ни одна из ячеек таблицы, которые я добавляю, не обрезается, она хорошо заканчивается и идентифицируется. Авторазмер выглядит так:

Авторазмер на экране iPhone 5

Теперь проблема заключается в том, что когда я пытаюсь сделать это на 3,5-дюймовом экране iPhone 4, последняя ячейка таблицы наполовину обрезается, потому что высота теперь составляет 275. Я хочу, чтобы представление таблицы уменьшилось, но я хочу, чтобы высота оставалась кратной 33.

Я могу придумать два возможных пути: 1) В раскадровке установить правильное значение высоты небольшого табличного представления (скажем, 297), тогда есть ли способ установить максимальный размер для автоматического изменения размеров через раскадровку?

2) Программно определить тип iPhone и настроить в коде. Какой самый безопасный способ сделать это?

1 ответ

Решение

Вы можете сделать это в коде, обнаружив тип iPhone, такой как #2, или, если вы используете ограничения макета, вы можете добавить одно ограничение в коде, которое связывает высоту представления таблицы с высотой экрана. Высота представления таблицы может быть выражена как высота экрана, умноженная на множитель плюс константа, поэтому, если вы решите для этих двух уравнений, вы получите значения для множителя и константы, которые будут работать:

568 * множитель + постоянная = 363 и 480 * множитель + постоянная = 297

Если вы решите это, вы получите множитель = 0,75 и постоянную = -63,0115

Поэтому код, который я использую, выглядит следующим образом. Я добавляю коэффициент выдумки 10 к константе, которую я рассчитал, чтобы позаботиться о заполнении в табличном представлении (я определил это опытным путем). Я создал ограничение высоты в IB и сделал для него IBOutlet - не имеет значения, каково его значение, поскольку я немедленно удаляю его в viewDidLoad (это необходимо в IB, поэтому ограничений будет достаточно).

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Ten",@"Eleven",@"Twelve"];
    [self.tableView reloadData];
    [self.tableView removeConstraint:self.tableHeight];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeHeight relatedBy:0 toItem:self.view attribute:NSLayoutAttributeHeight multiplier:0.75 constant:-63.0115 + 10]];
}
Другие вопросы по тегам