Я пытаюсь настроить высоту ячейки для одной из ячеек в моем табличном представлении. Я настраиваю размер с помощью параметра «Высота строки» внутри «Инспектора размеров» рассматриваемой ячейки. Когда я запускаю приложение на своем iPhone, размер ячейки по умолчанию устанавливается из «размера строки» в табличном представлении.
Если я изменю «размер строки» табличного представления, то размер всех ячеек изменится. Я не хочу этого делать, поскольку я хочу нестандартный размер только для одной ячейки. Я видел много постов, в которых есть программное решение проблемы, но я бы предпочел сделать это через раскадровку, если это возможно.
источник
UITableView
содержание сDynamic Prototypes
наStatic Cells
, я сделал это, и весь мой проект взорвался ... чуть не убил себя.Если вы используете UITableViewController, реализуйте этот метод:
В функции ряда вы можете выбрать Высота. Например,
В этом примере высота первой строки составляет 100 пикселей, а остальные - 60 пикселей.
Я надеюсь, что этот может помочь вам.
источник
Для динамических ячеек
rowHeight
значениеUITableView
всегда переопределяет отдельные ячейкиrowHeight
.Это поведение, IMO, ошибка. Каждый раз, когда вам приходится управлять своим пользовательским интерфейсом в двух местах, он подвержен ошибкам. Например, если вы меняете размер ячейки в раскадровке, вы должны помнить, чтобы изменить их
heightForRowAtIndexPath:
также. До тех пор, пока Apple не исправит ошибку, лучшим решением в настоящее время является переопределениеheightForRowAtIndexPath:
, но использование фактических ячеек прототипа из раскадровки для определения высоты, а не использование магических чисел . Вот пример:Это обеспечит автоматическое отслеживание любых изменений высоты прототипа во время выполнения, и вам нужно будет управлять своим пользовательским интерфейсом только в одном месте: раскадровке.
источник
Я создал код, на который намекают различные ответы / комментарии, чтобы он работал для раскадровок, использующих ячейки прототипа.
Этот код:
Спасибо Ответботу, Бреннану и Ленсовету.
источник
На самом деле есть два места, где вам нужно изменить высоту строки: сначала ячейка (вы уже это изменили), а затем выберите представление таблицы и проверьте инспектор размера.
источник
Я думаю, что это ошибка.
Попробуйте отрегулировать высоту не инспектором утилит, а перетаскиванием мышью непосредственно по раскадровке.
Я решил эту проблему с помощью этого метода.
источник
Если вы используете Swift, используйте как это. Не используйте раскадровку, чтобы выбрать высоту строки. Программно установить высоту строки таблицы следующим образом:
источник
cell.sizeToFit(); self.tableView.rowHeight = cell.frame.height
Вы можете получить высоту UITableviewCell (в UITableviewController - статические ячейки) из раскадровки с помощью следующих строк.
источник
Откройте раскадровку в представлении XML и попробуйте изменить
rowHeight
атрибут требуемого элемента.Это сработало для меня, когда я попытался установить собственный rowHeight для моей прототипированной строки. Это не работает через инспектора, но через XML это работает.
источник
Вы можете использовать прототип
cells
с кастомомheight
, а затем вызыватьcellForRowAtIndexPath:
и возвращать егоframe.height
.:.источник
Если вы хотите установить статическую высоту строки, вы можете сделать что-то вроде этого:
источник
Я недавно боролся с этим. Моя проблема заключалась в том, что рассмотренные выше решения с использованием этого
heightForRowAtIndexPath:
метода работали бы для iOS 7.1 в Симуляторе, но затем полностью облажались, просто переключившись на iOS 8.1.Я начал читать больше о самоконтроля ячеек (введен в iOS 8, читайте здесь ). Было очевидно, что использование
UITableViewAutomaticDimension
iOS помогло бы в iOS 8. Я попытался использовать эту технику и удалил использованиеheightForRowAtIndexPath:
и вуаля, теперь она отлично работает в iOS 8. Но тогда iOS 7 не было. Что мне было делать? Мне нужно былоheightForRowAtIndexPath:
для iOS 7, а не для iOS 8.Вот мое решение (сокращенное для краткости), которое позаимствовано из ответа @JosephH, опубликованного выше:
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO (@ "8.0") на самом деле из набора определений макросов, которые я использую, которые я где-то нашел (очень полезно). Они определены как:
источник
Та же проблема возникла при работе на XCode 9 с использованием Swift 4 .
Добавьте AutoLayout для элементов пользовательского интерфейса внутри ячейки, и высота строки пользовательской ячейки будет работать соответственно, как указано.
источник
Для динамических ячеек rowHeight, установленный в UITableView, всегда переопределяет rowHeight отдельных ячеек. Просто рассчитайте динамическую высоту, если содержимое внутри строки.
источник
Единственное реальное решение, которое я смог найти, это
Это работает и позволяет не иметь ужасного переключателя / при дублировании логики уже в StoryBoard. Не уверен насчет производительности, но я думаю, что когда вы
cellForRow:
попадаете в камеру, которая уже инициализирована, это так же быстро. Конечно, здесь, возможно, есть побочные убытки, но, похоже, у меня это работает нормально.Я также разместил это здесь: https://devforums.apple.com/message/772464
РЕДАКТИРОВАТЬ: Ортвин Генц напомнил мне, что
heightForRowAtIndexPath:
будет вызываться для всех ячеек TableView, а не только видимых. Звучит логично, поскольку iOS должна знать общую высоту, чтобы можно было показывать правильные полосы прокрутки. Это означает, что это возможно для небольших TableViews (например, 20 ячеек), но забудьте об этом в 1000 Cell TableView.Кроме того, предыдущий трюк с XML: То же, что первый комментарий для меня. Правильное значение уже было там.
источник
Добавлен как комментарий, но размещен как ответ для наглядности:
Кажется также, что проблема заключается в том, что вы изначально устанавливаете табличное представление как «статические ячейки», а затем меняете его на «динамические прототипы». У меня была проблема, когда даже метод делегата
heightForRowAtIndexPath
игнорировался. Сначала я решил эту проблему путем непосредственного редактирования XML раскадровки, а затем, наконец, просто перестроил сцену раскадровки с нуля, используя динамические прототипы с самого начала.источник
Учитывая, что я не нашел решения этой проблемы с помощью Interface Builder, я решил опубликовать программное решение проблемы в Swift с использованием двух динамических ячеек , хотя первоначальный вопрос задавался для решения с помощью Interface Builder. Несмотря на это, я думаю, что это может быть полезно для сообщества Stack Overflow:
источник
Еще одна вещь, которую вы можете сделать, это перейти к вашей структуре документа, выбрать табличное представление, в которое вложена ячейка вашего прототипа. Затем в инспекторе размеров измените в табличном представлении высоту строки нужное значение и снимите флажок «Автоматически».
источник