Intereting Posts
Библиотечные файлы, отсутствующие в проекте PJSIP, и как связать файлы библиотеки? Swift IOS Spritekit Scaling Sprite Размер на основе размера устройства SWRevealViewController panGestureRecognizer с помощью pageViewController iOS (боковое меню при прокрутке) Как загрузить PDF-файл, прежде чем его просмотр будет нажат Как определить основные данные. Легкая миграция прошла успешно. UITextField подчеркивает, что NSAttributedString имеет только 1 пиксель? Быстрая ошибка: «MailCompositionService неожиданно завершается» Использование GDB для отладки приложений iOS Как заставить контроллер детского представления понять его структуру, когда он представлен в ландшафте? NSJSONSerialization иногда возвращает null в async-запросе Подавать оповещение на ViewController только один раз. UIPopoverPresentationController, показывающий полноэкранное модальное всплывающее окно Проблемы интеграции drupal-ios-sdk с iPhone-приложением Строка состояния все еще отображается в iOS 7, несмотря на правильные настройки PList iPhone снимает фото на разблокировку телефона

Автоматическая компоновка: ограничение, связанное с несколькими элементами

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

Это невозможно сделать с одним ограничением. Вместо этого вам нужно создать дополнительный UIView над текстовым полем. Затем вы можете установить следующие противопоказания:

  1. 4 * extraView.height = containerView.height
  2. extraView.top = topLayoutGuide
  3. extraView.bottom = textField.top

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

То, как я это сделаю, это использовать ограничения с VisualFormat. Вот так:

 double quarterSuperViewHeight = superView.frame.size.height / 4; NSDictionary* metrics = NSDictionaryOfVariableBindings(quarterSuperViewHeight); NSDictionary* views = NSDictionaryOfVariableBindings(textField, navigationBar); [superView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[navigationBar]-quarterSuperViewHeight-[textField]" options:0 metrics:metrics: views:views]; 

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