Nano Hash - криптовалюты, майнинг, программирование

Ячейка автоматической высоты iOS 8 имеет неправильную высоту при первой загрузке

У меня есть приложение iOS 8, где у меня есть страница результатов поиска, каждая ячейка которой имеет автоматический размер в зависимости от высоты определенной метки. Однако после первой загрузки представления размер отображаемых ячеек не изменяется автоматически. После прокрутки вниз следующие ячейки имеют правильный размер. Я подключаю ограничения автоматического макета в своей раскадровке. У меня есть следующий код в viewDidLoad.

- (void)viewDidLoad {
    [super viewDidLoad];

    //configure tableView so that we use autolayout enabled row heights
    self.tableView.estimatedRowHeight = 68;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}

Кто-нибудь еще испытал это?


  • Вы когда-нибудь решали это? У меня такая же проблема. 29.06.2015
  • Вы можете решить эту проблему с помощью этого ответа. Надеюсь, это поможет вам. 28.04.2016

Ответы:


1

Да, я видел эту же проблему при создании представлений и ограничений в раскадровке (но не с представлениями, добавленными в код). Я исправил это, добавив этот код в пользовательский класс ячеек,

-(void)didMoveToSuperview { 
    [self layoutIfNeeded];
}

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

05.01.2015
  • Спасибо. Это исправило мою проблему. Кто-нибудь знает, это ошибка или это признак того, что вы что-то делаете неправильно? 06.01.2015
  • Мне пришлось удалить self layoutIfNeeded в функции, где я загружал свои данные, но это решение работает, спасибо 02.06.2015
  • Сработало -- спасибо. @dennis Я бы поместил это в категорию ошибок. 30.07.2015
  • У меня была та же проблема, но мне нужно было только добавить строки estimatedRowHeight и rowHeight в OP viewDidLoad - раньше у меня были только настройки в Interface Builder (которые на данный момент я не уверен, что заслуживает быть заглавными). 30.08.2015
  • Не работал к сожалению. Любые другие предложения? Вы использовали классы размеров? Классы размера, похоже, вызывают проблемы, основанные на других ответах SO. 13.01.2016
  • Это сработало для меня. Похоже, ошибка все еще присутствует в iOS 10. Кто-нибудь знает подробности о том, почему это проблема или статус реального исправления? 12.12.2016
  • Спасибо за это, также решил мою проблему с моими пользовательскими ячейками, не имеющими правильной высоты при содержании пользовательского представления. Эта ошибка все еще присутствует в iOS 11. (или мы делаем что-то не так с представлениями внутри ячеек) 25.02.2018
  • Все еще вижу это в iOS 12. Спасибо! 11.04.2019

  • 2

    Ответ от rdelmar мне не помог.

    Что я сделал, так это добавил этот код:

    [tableView setNeedsLayout];
    [tableView layoutIfNeeded];
    [tableView reloadData];
    

    после извлечения данных и вызова первого [tableView reloadData], который в моем случае находится в методе viewDidLoad моего контроллера представления.

    Таким образом, код результата будет:

    NSArray *fetchedData = ...
    
    [tableView reloadData]; //Fist table reload
    [tableView setNeedsLayout];
    [tableView layoutIfNeeded];
    [tableView reloadData]; //Second table reload
    

    Этот ответ взят отсюда: http://useyourloaf.com/blog/self-sizing-table-view-cells.html#comment-1783719287

    23.10.2015
  • Большое спасибо за ответ! (Ю). Работает хорошо. 16.06.2016
  • Я не могу поверить, что этот хак сработал, но большое спасибо! Я пытался решить эту проблему целую вечность... 11.08.2016
  • Для меня добавление tableView.layoutIfNeeded() к ViewDidLoad() помогло. Спасибо, что указали мне на это! 17.01.2019

  • 3

    Я думаю, что вместо того, чтобы заставлять tableView.reloadData() и tableView.layoutIfNeeded() в viewDidLoad, вы можете просто установить автоматическую высоту tableView в viewWillLayoutSubviews():

    Быстрый:

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        tableView.estimatedRowHeight = 300
        tableView.rowHeight = UITableViewAutomaticDimension
    }
    
    20.10.2016

    4

    У меня была та же проблема, и я исправил ее, переместив назначения текстовых свойств ячейки UILabels (будучи единственными компонентами, которые могли повлиять на расчет высоты в моей конкретной ячейке) на:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    вместо:

    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

    Прежде чем сделать это, я заметил, что высота ячейки будет правильно рассчитана, если ячейка на мгновение прокручивается за пределы экрана, а затем возвращается в поле зрения. Скорее всего потому, что в этот момент в ячейке была необходимая информация о содержимом UILabel, определяющем окончательную высоту.

    22.09.2017

    5

    Я смог обойти это, не используя перья/раскадровки, а сделав макет программно.

    20.01.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..