Использование ограничений для сохранения двух табличных видов одинаковой высоты и одинакового расстояния

Контекст / Что я хотел бы сделать

  • Я создаю это для iOS 7
  • Я использую StoryBoard
  • У меня есть два UITableViews , которые я бы хотел оставить на одной высоте и на расстоянии друг от друга, чтобы сохранить визуальную согласованность между устройствами 3,5 и 4 дюйма
  • Поэтому при переключении с 4-дюймового экрана на 3,5-дюймовый экран я бы хотел:
  • Стол выглядит короче, но остается равным по высоте
  • Для просмотра верхней таблицы, чтобы сохранить тот же y pos
  • Для отображения нижнего стола сдвиньте его вверх, чтобы поддерживать такое же расстояние между нижней частью верхнего стола и верхней частью нижней таблицы. AKA – тот же самый разрыв между ними

введите описание изображения здесь

Что я пробовал

  • Используя значок Pin в раскадровке, я выбрал оба TableViews и установил их высоту равными и включил этот код в контроллер вида:

[self.topTableView addConstraint: [NSLayoutConstraint constraintWithItem: self.bottomTableView: NSLayoutAttributeBottom relatedBy: 0 toItem: self.bottomTableView: NSLayoutAttributeTop multiplier: 1 constant: 30]];

Вопрос

  • Как сохранить их одинаковой высоты, сохраняя при этом одинаковое расстояние

Обновить

введите описание изображения здесь

  • layoutSubviews в бесконечном цикле на iOS 8 GM
  • Не удалось вставить новую ошибку подключения к разъему
  • UITableViewCell правильно устанавливается только на прокрутке
  • UITableView reloadData и cellForRowAtIndexPath - прерывается?
  • Разделители UITableView неправильно рисуются при повторном использовании ячеек?
  • Используя текущую временную метку для запроса всех сообщений до этого времени
  • Как установить «верхний» цвет границы на сгруппированные UITableViewCells?
  • Ошибка: UITableView переместится вверх с помощью UITableViewAutomaticDimension
  • 2 Solutions collect form web for “Использование ограничений для сохранения двух табличных видов одинаковой высоты и одинакового расстояния”

    Просмотрите предложенный Apple способ сделать это (он находится в разделе под названием «Создание равного расстояния между представлениями»).

    Изменить: Apple теперь предпочитает использовать представления стека для этой цели. Смотрите это видео WWDC 2013 для OS X, и этот iOS один из WWDC 2015

    Они не представляют собой решение только для ограничений. Вместо этого они предлагают размещать скрытые «проставки» между вашими видимыми видами.

    Обоснование этого связано с тем, как работает система ограничений. Сопряженные отношения всегда строго между двумя объектами. В ограничении расстояния это отношение должно находиться между вещью, находящейся на расстоянии, и вещью, из которой это X пространство. Вот и все. Нет никакого места для третьего отношения, чтобы сделать пространство (сам результат отношения) равным некоторому другому значению.

    С другой стороны, ограничения высоты (и ширины) не являются отношениями. Вы можете установить высоту вещи с простой константой, которая не связана ни с чем другим. Таким образом, есть «комната», чтобы указать отношение к другому объекту – например, высота должна быть равна другой высоте (или ширине или тому подобное).

    Поэтому, если вы когда-либо обнаруживаете, что хотите ограничить все связанные друг с другом отношения, посмотрите на высоты и ширину вместо пробелов. В вашем конкретном примере вы можете окружить UITableView s скрытыми UIView s, установить их высоту равными и их пространство для соседей / контейнеров до 0 или некоторой другой низкой константы.

    В качестве дополнительного бонуса это все возможно в IB. Нет необходимости в пользовательском коде или подклассах.

    Верхний вид таблицы должен иметь ограничение на верх супервизора (или ограничение верхнего макета), ограничение вертикального расстояния до представления нижней таблицы и ограничение по высоте. В представлении нижней таблицы должно быть ограничение на нижнюю часть супервизора и ограничение по высоте с верхним столом. Главное, что вам нужно, – сделать приоритет ограничения высоты таблицы верхнего стола менее 1000, чтобы при изменении высоты экрана одна вещь, которая не является обязательной (ограничение <1000 высоты), будет вещь, которая настраивается. Все это можно настроить в IB.

    После редактирования:

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

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.