Читаем iOS. Приемы программирования полностью

/* Вертикальные ограничения */

[constraints addObjectsFromArray:

[NSLayoutConstraint constraintsWithVisualFormat: kVConstraint

options:0

metrics: nil

views: views]

];


[self.bottomGrayView.superview addConstraints: constraints];


}


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

Следующий и, пожалуй, последний компонент пользовательского интерфейса, для которого мы собираемся написать ограничения, — это кнопка, расположенная в нижнем сером виде. Метод, который будет заниматься ее ограничениями, называется applyConstraintsToButtonOnBottomGrayView. Перед тем как его реализовать, обсудим требования, которым должны соответствовать ограничения для нижней кнопки:

• кнопка должна быть вертикально центрирована в нижнем сером виде;

• ее левый край должен быть выровнен по правому краю кнопки, находящейся в верхнем сером виде;

• с ней не должны применяться строго определенные значения высоты и ширины; ее высота и ширина должны зависеть от содержимого — в данном случае от текста Button, который мы на ней записываем.


— (void) applyConstraintsToButtonOnBottomGrayView{


NSDictionary *views = NSDictionaryOfVariableBindings(_topButton,

_bottomButton);


NSString *const kHConstraint = @"H:[_topButton][_bottomButton]";


/* Горизонтальные ограничения */

[self.bottomGrayView.superview addConstraints:

[NSLayoutConstraint constraintsWithVisualFormat: kHConstraint

options:0

metrics: nil

views: views]

];

/* Вертикальные ограничения */

[self.bottomButton.superview addConstraint:

[NSLayoutConstraint constraintWithItem: self.bottomButton

attribute: NSLayoutAttributeCenterY

relatedBy: NSLayoutRelationEqual

toItem: self.bottomGrayView

attribute: NSLayoutAttributeCenterY

multiplier:1.0f

constant:0.0f]

];


}


Наконец, мы должны удостовериться в том, что контроллер вида сообщает среде времени исполнения, что он может обрабатывать любые варианты ориентации. Ведь именно этот аспект наиболее сильно интересовал нас в данном разделе. Поэтому мы переопределим метод supportedInterfaceOrientations в виде UIViewController:


— (NSUInteger) supportedInterfaceOrientations{

return UIInterfaceOrientationMaskAll;

}


Итак, работа с этим контроллером вида завершена. Запустим приложение и посмотрим, как оно работает при книжной ориентации (рис. 3.7).


Рис. 3.7. Приложение отображает компоненты пользовательского интерфейса в книжной ориентации согласно требованиям, которые мы предъявили


А теперь момент истины! Будет ли оно работать в альбомном режиме? Попробуем (рис. 3.8).


Рис. 3.8. Как и ожидалось, тот же самый код отлично работает и при альбомной ориентации экрана


Отлично! Все получилось.

См. также

Раздел 3.0.

3.4. Конфигурирование ограничений автоматической компоновки в конструкторе интерфейсов

Постановка задачи

Требуется задействовать весь потенциал конструктора интерфейсов для создания ограничений при работе с пользовательским интерфейсом.

Решение

Выполните следующие шаги.

1. Откройте в конструкторе интерфейсов файл XIB или файл раскадровки, который вы собираетесь редактировать.

2. Убедитесь, что в конструкторе интерфейсов вы выбрали объект вида, в котором собираетесь активизировать автоматическую компоновку. Просто щелкните на этом объекте.

3. Щелкните на элементе меню View — Utilities — Show File Inspector (Вид — Утилиты — Показать инспектор файлов).

4. Убедитесь, что в элементе File Inspector (Инспектор файлов) в разделе Interface Builder Document (Документ конструктора интерфейсов) установлен флажок Use Autolayout (Использовать автоматическую компоновку) (рис. 3.9).


Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже