Autolayout в UIView, где безопасно запрашивать вычисленные значения макета?

У меня эта проблема. Я использую представление коллекции как подпункт основного представления UIViewController . Представление коллекции привязано к размеру супервизора, поэтому у него есть 4 ограничения для свинца, трейла, верхнего и нижнего с константами, равными 0. Ячейка является подклассом для UICollectionViewCell и состоит из:

  1. первый вид заголовка
  2. второй вид заголовка
  3. UITableView

Ячейка просмотра коллекции загружается из xib, а интерфейс представлений – для 4-дюймовых устройств.
Первый вид заголовка закреплен на вершине, трейле, ведет с постоянным 0 и фиксированной высотой до его супервизора.
Второй вид заголовка ограничен первым видом заголовка с вертикальным интервалом, равным 0, фиксированной высотой, закрепленным тропом, ведущим с константой 0 до его супервизора.
Вид таблицы ограничен вторым видом заголовка с вертикальным интервалом, равным 0, и закрепленным тропом, ведущим и нижним с постоянной 0 до его супервизора.
На 4-дюймовом экране все в порядке, но когда я загружаю 3.5, у меня есть некоторые проблемы, факт в том, что я хочу создать UITableViewCell с динамической высотой. Высота должна быть высотой UITableView погруженной в количество строк, таким образом они появятся на экране.
Делегат представления таблиц и источник данных оцениваются только тогда, когда я устанавливаю данные, которые необходимо загрузить, и это происходит после его создания, но до того, как ячейка представления коллекции будет возвращена из метода источника данных.
В методе UICollectionViewCell подкласса UICollectionViewCell я устанавливаю высоту строки UICollectionViewCell , до желаемого значения, которое равно

 - (void) layoutSubviews { [super layoutSubviews]; self.answerTableView.rowHeight = self.answerTableView.bounds.size.height / self.quizSection.answers.count; } 

Дело в том, что здесь табличное представление не изменено, поэтому результирующий rowHeight ошибочен, значение такое же, что и в 4-дюймовом дисплее. Супервизор ( contentView ячейки коллекции) одобрен, но представление таблицы имеет неправильный размер. При отображении вид коллекций прекрасен, за исключением того факта, что ячейки представления таблицы неправильны по размеру. Поэтому я начал отслеживать цикл ячейки представления коллекции.

  1. В методах initWithFrame ячейка просмотра коллекции имеет тот же размер исходного xib (4-дюймовый экран)
  2. В диспетчере представлений, если я задаю размер ячейки просмотра коллекции сразу после удаления, при изменении размера до нужного размера экрана, но вид таблицы внутри не
  3. После загрузки данных и установки делегата и источника данных, просмотр коллекции одобрен, но tableview not
  4. В -updateConstraints ячейки представления коллекции размер табличного вида по-прежнему не соответствует -updateConstraints
  5. В -layoutSubviews ячейки представления коллекции размер табличного вида по-прежнему не соответствует -layoutSubviews
  6. Первый вызов метода dtasource в представлении таблицы возвращает правильный размер

Я нашел решение, которое использует методы делегата - (float) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath , но я действительно любопытен, почему другой подход не работает, может кто-нибудь объяснить, почему?
СПАСИБО
[КОД ДЛЯ ПОМОЩИ]

 - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil]; if ([arrayOfViews count] < 1) { return nil; } if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]]) { return nil; } self = [arrayOfViews objectAtIndex:0]; [self.answerTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:AnswerCellIdentifier]; } return self; } - (void) layoutSubviews { [super layoutSubviews]; self.answerTableView.rowHeight = self.answerTableView.bounds.size.height / self.quizSection.answers.count; //WRONG } - (void) updateConstraints { [super updateConstraints]; self.answerTableView.rowHeight = self.answerTableView.bounds.size.height / self.quizSection.answers.count; //WRONG } #pragma mark - #pragma mark custom getter/setter - (void) setQuizSection:(QuizSection *)quizSection { if (_quizSection == quizSection) { return; } _quizSection = quizSection; //Set data self.questionLabel.text = _quizSection.question[KEY_TEXT]; self.answerTableView.delegate = self; self.answerTableView.dataSource = self; } #pragma mark - #pragma mark TableViewDelegate TableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.quizSection.answers.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:AnswerCellIdentifier]; NSDictionary * answerDict = self.quizSection.answers[indexPath.row]; cell.textLabel.text = answerDict[KEY_TEXT]; return cell; } 

Interesting Posts

NSUrlSession продолжает передачу файлов, если приложение убито из диспетчера задач?

В процессе покупки приложения (IAP), похоже, происходит сбой приложения при запуске для одного из моих пользователей

Как отслеживать точную проблему для сбоя в iOS

Смотреть комплект CFBundleVersion

Подписан тем же сертификатом, но ошибка: встроенный двоичный файл не подписан с тем же сертификатом

Каков наилучший способ создать приложение ios для Windows 7?

Не удалось найти перегрузку для «init», которая принимает предоставленные аргументы SWIFT

повторное воспроизведение автоматически

В чем разница между NSInvocationOperation и NSBlockOperation

Airplay от iPad – отдельный UIView для отображения на Apple TV

Отправлять локальное уведомление, когда загрузка завершается через NSURLSession / NSURLSessionDownloadTask

Как создать UIImageView с растяжимым изображением

Как восстановить с страницы загрузки ошибки с помощью jQuery mobile, когда компоненты сафари скрыты?

Программно отправить событие удаленного управления в iOS

UITextView's startFirstResponsder не работает должным образом

Давайте будем гением компьютера.