2013-02-26 3 views
2

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

Я попытался решить это, используя subviews с TapGestureRecognizers. У меня есть неопределенное количество строк. При кратковременном нажатии меняет высоту перевернутой линии и вручную меняет положение следующих строк. Теперь становится все труднее справляться со всеми возможностями расширения/сокращения/позиционирования. Я ищу более удобный способ справиться с этим. Есть ли способ выровнять подвыборы вертикально, чтобы позиции линий менялись автоматически, если одна высота изменяется?

+0

На самом деле проще реализовать аккордеонный список с помощью 'UITableView'. Я уверен, что Apple где-то пример. – graver

ответ

1

Я думаю, что лучшим решением является использование tableView, в котором ячейки будут вносить свой пользовательский вид. Позиционирование и все будут обрабатываться самим таблицей.

+0

Я попытался изменить высоту одной ячейки, но теперь ячейка А перекрывает ячейку B. Есть ли флаг, который я должен установить? – matthisb

+0

вызов внутри блока анимации или перезагрузка всей таблицы –

+0

хорошо, это сработало. В таблице: DidSelectRowAtIndexPath: я сохраняю индексную ячейку выбранной ячейки в массиве и перезаряжаю таблицу. Теперь в tableView: HeightForRowAtIndexOPath: я использую массив indexPaths для определения ячейки, которую я должен изменить. – matthisb

0

Если вы работаете с iOS 6, это должно быть довольно легко с ограничениями. Укажите, что каждое представление должно располагаться на определенном расстоянии от нижней части над ним, а когда над ним перемещаются или расширяются или сжимаются, это ограничение должно заставить все остальное двигаться, чтобы сохранить указанный пробел.

EDIT: Я только что понял, что вы упомянули в своем OP, что вы, возможно, не знаете наверняка, сколько просмотров вам нужно заблаговременно. Вероятно, это делает метод представления таблицы другим более предпочтительным. Это все еще возможно сделать с ограничениями (и я нашел довольно detailed tutorial here, который перебирает все).

+0

Какое ограничение будет выглядеть для меня? Раньше я никогда не использовал ограничений. Что-то вроде этого ? V: [line (== 10)]? И что я должен использовать NSLayoutFormatOptions? – matthisb

+0

Хорошо, тогда я попробую использовать tableview – matthisb

+0

@matthisb: есть очень подробный учебник [здесь] (http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2), на которые вы можете ссылаться, если вы решите пойти этим путем. – GeneralMike