2016-02-22 5 views
1

У меня есть UIScrollView, внутри этого UIScrollView У меня есть UIView и внутри UIView У меня есть UITextField's, некоторые UILabel's и на дне есть UITableView.UITableView высота размера динамического содержимого внутри UIScrollView с AutoLayout

Я хочу, чтобы UITableView соответствовал его высоте контента, UIView, чтобы соответствовать его высоте контента и UIScrollView, чтобы соответствовать его высоте контента.

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

Каков наилучший способ обработки, используя AutoLayout?

- UIViewController 
-- UIView 
--- UIScrollView 
---- UIView 
----- UILabel 
----- UITextField 
----- UITextView 
----- UITableView (at the bottom of the superview) 

или в XIb:

enter image description here

+1

Вы должны, как правило, не просмотры гнездятся прокрутки. Там царит безумие. Скорее, подумайте о том, как реализовать представление в виде таблицы без прокрутки, если вы все равно будете показывать все это. – SmokeDispenser

+0

Я все равно покажу все это, это правда, НО, это должны быть ячейки, потому что есть строки, которые будут добавлены и удалены пользователем динамически, и лучший способ справиться с этой ситуацией - использовать UITableView. –

+1

Просто используйте табличный вид. В любом случае это прокрутка, и он может содержать все материалы, которые вы помещаете в представление прокрутки. Нет необходимости в дополнительном просмотре прокрутки. Просто используйте один вид таблицы. – Fogmeister

ответ

4

Лучший способ осуществить это в лом иерархии, что у вас есть сейчас, и сделать следующее ...

- UIViewController (or UITableViewController) 
--- UITableView 
----- UIView (as the tableView.tableHeaderView) 
------- UILabel 
------- UITextField 
------- UITextView 
----- Rest of the cells for the table view. 

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

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

+1

Это именно то, что я думал в этот момент! отличный ответ мужчина! –

1

@Jan Греве является правильным. Но если вы все еще хотите сделать это

  1. Установить нижнее пространство для контейнерного ограничения между Table View и его супер видом 0
  2. Увеличения/уменьшением ограничения высоты Table View с каждой вставкой/удалением (You придется делать это программно)
  3. Установить содержание смещение Scrollview на новую высоту обзора
1

лучшая часть AutoLayout теперь вам не придется беспокоиться о UIScrollView Siz контента е.

Если вы установили все ограничения должным образом (без каких-либо предупреждений), AutoLayout управляет размером содержимого для самого scrollView.

Задайте все ограничения subview, но не добавляйте ограничения height и width.

А для contentSize добавить нижней ограничения внутреннего зрения (подвид из Scrollview) до UIScrollView. Это увеличит размер и высоту содержимого контента по размеру и высоте по внутреннему виду.

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

0

Вы можете установить фиксированную высоту в таблицуView и связать ограничение с розеткой. Тогда вам нужно переопределить viewDidLayoutSubviews() для того, чтобы установить высоту динамически на основе contentSize таблицы:

@IBOutlet weak var dynamicTVHeight: NSLayoutConstraint! 

internal override func viewDidLayoutSubviews() { 
    let height = min(self.view.bounds.size.height, self.tableView.contentSize.height) 
    self.dynamicTVHeight.constant = height 
    self.view.layoutIfNeeded() 
} 
Смежные вопросы