Я просто начинаю понимать, что такое iOS, поэтому я надеюсь, что получаю правильный уровень детализации здесь ...
У меня есть UILabel
, загруженный в ячейку таблицы, созданную с помощью .xib. На самом деле несколько этикеток, одна из которых имеет разную длину (и, следовательно, разную высоту). heightForRowAtIndexPath
и т. Д. Должным образом переопределены, и необходимая высота для обеих меток рассчитывается правильно и присваивается каждой из .frame
После того, как были установлены оба размера, я установил frame.origin.y для метки меньшего размера (фиксированная длина, всегда на одну строку), чтобы он соответствовал метке большего размера. Это работает настолько, насколько можно видеть, шагая через cellForRowAtIndexPath
, но при первоначальном отображении вновь созданной ячейки, источник кажется не совсем вертикально центрированным в контейнере, в отличие от застрявшей вершины.
После нажатия кнопки «через» ячейку в другом представлении и возврата к (теперь повторно используемому и, по-видимому, уже правильному размеру) контейнеру задается, как и раньше, и он появляется там, где я ожидал.
Это кажется , как будто размер контейнера изменяется после возврата cellForRowAtIndexPath
, и что где-то там находится новая позиция для нашей метки; это объясняет, почему повторное использование ячейки позже решает проблему.
Я испробовал каждую, по-видимому, вменяемую комбинацию внутренних и внешних настроек режима и базовой линии, настроек растяжения и т. Д. В недоумении для объяснений и / или обходных путей.
Обновление:
Предложение по Изменение позиции пользовательского UIButton в пользовательском вопросе UITableViewCell решило проблему. Решение состояло в том, чтобы создать подкласс UITableViewCell
и переопределить layoutSubviews
, тем самым получая возможность переместить подэлементы после того, как TableView выполнил свое обычное позиционирование. Закроет это, как только этот человек ответит здесь, или щедрость истечет, и я сам отвечу, с кодом.