Это должно быть довольно прямо вперед, но, похоже, мне нужно выйти и спросить, если другие сталкивались с этим ...IOS 7+ UITableView с 3 различных прототипов клеток различной высоты
У меня есть проект на xcode 6, ориентированном на iOS 7+. Я использую раскадровку и autolayout
. Я создал UIViewController
, упал на UITableView
, и на этом UITableView
я упал на 3 разных прототипа, каждый с разной высотой. Каждая прото-ячейка имеет свой собственный класс UITableViewCell
, связанный соответственно с UIElement
.
Эти протоэлементы разработаны в графическом редакторе раскадровки, и каждый из них имеет фиксированную высоту. Никогда не будет расти в такой высоте: Using Auto Layout in UITableView for dynamic cell layouts & variable row heights
Проблема со всеми примерами, которые я продолжаю искать, заключается в том, что все они используют одну ячейку прототипа и изменяют высоту на основе содержимого (то есть используют UITextView
и калибруют высота ячейки зависит от количества текста в представлении).
Поскольку мои протоэлементы уже разработаны в раскадровке, и они никогда не превысят их высоту дизайна с динамическим контентом, все, что я хочу сделать, это показать их по мере их создания, когда они будут добавлены в таблицу.
Я использую оператор switch в cellForRowAtindexPath
, чтобы определить, какой класс UITableViewCell
использовать на основе indexPath.row
.
Я создал некоторые фиктивные данные в массиве и использовал его для построения таблицы с тремя строками, чтобы увидеть каждый из трех типов ячеек, отображаемых в таблице.
Все это отлично работает на iOS8. Однако на iOS7 все три мои камеры визуально заканчиваются друг на друга.
Для усмешки я затем применил метод heightForRowAtIndexPath
и просто использовал переключатель, чтобы определить, с чем я столкнулся, а затем верну назад высоту ячейки прототипа (из размеров, показанных в дизайнере раскадровки). Это должно было быть простым, жестко закодированным подходом, чтобы выяснить, требуется ли для решения проблемы heightForRowAtIndexPath
.
Опять же, отлично работает на iOS 8, но на iOS7 все 3 ячейки сложены друг на друга.
Я думаю, что основной вопрос заключается в следующем: поскольку я использую прототипы с раскадрой, которые имеют фиксированные размеры и ограничения на всех UIComponent
в этих прото-ячейках, почему это не работает на iOS 7?
Я пытаюсь избежать добавления тонны кода, просто сделайте эту работу на iOS7.
hmm ... вы пытались запустить приложение на устройствах iOS 7 или симуляторах разных размеров с различными настройками инструмента выравнивания перекрестия на раскадровке? Возможно, это преступник, что что-то не так с вашим выравниванием, когда меняются размеры. Возможно, он правильно отображается на iOS8 только потому, что iOS8 достаточно умен, чтобы исправить эти ошибки для вас. Раньше у меня была аналогичная проблема. Итак, это только моя догадка. Надеюсь это поможет. – minjiera
Компоненты пользовательского интерфейса в каждой ячейке расположены правильно. Проблема в том, что ячейки сложены друг на друга. Похоже, вы взяли три разных UIView и установили их в одно и то же происхождение x/y. Они не отображаются линейно (один за другим) в таблице, как вы ожидали. – Adam
Прямой путь вперед должен работать, я делал это много раз, можете ли вы опубликовать скриншот раскадровки и как настроить эти ячейки? – oren