2017-02-13 2 views
0

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

View 
    Stack view 
    Table view 

Я хочу, чтобы авто-макета для:

Пусть вид стека потреблять столько вертикального пространства он должен. Остальная часть вертикального пространства остается в виде таблицы.

Я использую этот макет ограничение:

stackView.leading == superview.leading 
stackView.trailing == superview.trailing 
stackView.top == topLayoutGuide.bottom 
tableView.top == stackView.bottom 
tableView.leading == superview.leading 
tableView.trailing == superview.trailing 
tableView.bottom == bottomLayoutGuide.top 

Но автоматическая раскладка жалуется:

  • Таблица Вид: необходимость ограничение на позицию Y или высоту.
  • Stack View: Необходимы ограничения для положения или высоты Y.

Чтобы это исправить, я попытался увеличения вертикального контента приоритет сопротивления сжатия в представлении стопки:

Stack View Content Compression Resistance Priority: 
    Horizontal: 750 
    Vertical: 751 

Table View Content Compression Resistance Priority: 
    Horizontal: 750 
    Vertical: 750 

Но не повезло, авто-раскладка не дает ту же ошибку.

Что мне здесь не хватает?

+0

авто-макет является инструментом, используемым для установки оконных рам ... необходимо указать высоту либо Tableview или stackView для того, чтобы сделать это. С вашими ограничениями у вас есть два вида неопределенной высоты – CSmith

ответ

0

У меня проблема. Оказывается, нам нужно поместить конкретный элемент в представление стека, чтобы его исправить. Например:

View 
    Stack view 
     Label 
    Table view 

исправляет проблему, в то время как:

View 
    Stack view 
     Label 
     Stack view 
    Table view 

Перерывы снова, в то время как:

View 
    Stack view 
     Label 
     Stack view 
      Label 
    Table view 

фиксирует его снова и т.д.

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

1

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

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

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

enter image description here

+0

Есть ли недостатки в этом подходе (например, возможно, скрывая тонкую ошибку макета)? – Utku

+0

Да! может случиться так, что мы сделаем вид с внутренним размером заполнителя и во время выполнения он может не найти их. Но поскольку мы отмечаем его как владельца места, мы ДОЛЖНЫ предоставить их во время выполнения. – BangOperator

+0

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

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