2013-04-19 2 views
4

Я пытаюсь представить информацию об объекте, сгруппированном по разделам. Это может быть долгим, поэтому в каждом разделе используется вид для визуального разделения областей, и все они находятся в режиме прокрутки.Autolayout UIScrollView, чтобы соответствовать содержанию, включая subviews и сгруппированные таблицы

В первом подвью есть текстовое поле, размер которого изменяется в соответствии с текстом, а его родительское представление также изменяется в соответствии с текстовым полем.

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

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

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

Что нужно сделать, чтобы просмотр прокрутки соответствовал его содержимому, когда содержимое дополнительного представления может изменяться? Вид таблицы заполняет доступное пространство в родительском представлении, но родительский вид не расширяется, чтобы соответствовать. Я отмечаю, что третий вид имеет ограничение верхнего пространства для супервизора, а не только для представления над ним. Это видно на скриншоте ниже

layout and simulator

ответ

9

Я нашел решение, как и большинство решений, кажется очевидным в ретроспективе.

Я думаю, что моя проблема в том, что внутренняя тарелка не имела фиксированной высоты, и поскольку она также была прокруткой, она пыталась сместить все, что было назначено, вместо того, чтобы расширяться, чтобы соответствовать внутреннему контенту. Я смог решить свою проблему, добавив фиксированное ограничение высоты в IB и подключив его к розетке в контроллере просмотра. Затем в контроллере:

-(void) viewWillLayoutSubviews{ 
    [self.tableView layoutIfNeeded]; 
    self.tableViewHeightConstraint.constant = self.tableView.contentSize.height; 
} 

Derp. Таким образом, для представления таблицы требуется высота, поэтому я ее установил.

Вот скриншот, обратите внимание на фиксированное ограничение высоты на правой стороне: properly scrolling view

Смежные вопросы