UIScrollView и авторасположение
Этот technote предоставляет некоторую информацию относительно Автоматической поддержки Расположения UIScrollView.
Введение
Этот technote предоставляет некоторую информацию относительно Автоматической поддержки Расположения UIScrollView. В частности это демонстрирует «смешанное» и «чистый» автоматический подход расположения для UIScrollViews.
Подробно объяснение
В целом Автоматическое Расположение полагает, что вершина, оставленная, нижняя часть и правые края представления, видимые края. Т.е. при прикреплении представления к левому краю его суперпредставления Вы действительно прикрепляете его к минимальному x-значению границ суперпредставления. Изменение источника границ суперпредставления не меняет положение представления.
Класс UIScrollView прокручивает свое содержание путем изменения источника его границ. Для создания этой работы с Автоматическим Расположением вершина, левая, нижняя часть и правые края в представлении прокрутки теперь, означает края довольного представление.
Ограничения на подпредставления представления прокрутки должны привести к размеру для заполнения, который тогда интерпретируется как размер содержания представления прокрутки. (Это не должно быть перепутано с intrinsicContentSize методом, используемым для Автоматического Расположения.) Для калибровки кадра представления прокрутки с Автоматическим Расположением ограничения должны или быть явными относительно ширины и высоты представления прокрутки, или края представления прокрутки должны быть связаны к представлениям за пределами его поддерева.
Обратите внимание на то, что можно заставить подпредставление из представления прокрутки, казаться, плавать (не, прокручивают) по другому содержанию прокрутки путем создания ограничений между представлением и представлением вне поддерева представления прокрутки, таких как суперпредставление представления прокрутки.
Вот два примера того, как сконфигурировать представление прокрутки, сначала смешанный подход, и затем чистый подход.
Смешанный подход
Позиция и размер Ваше представление прокрутки с ограничениями, внешними к представлению прокрутки — т.е., translatesAutoresizingMaskIntoConstraints свойство установлено в НЕТ.
Создайте простое представление содержания UIView для своего представления прокрутки, которое будет размером, который Вы хотите, чтобы Ваше содержание имело. Сделайте его подпредставлением представления прокрутки, но позвольте ему продолжать переводить маску автоизменения размеров в ограничения:
Перечисление 1 смешанный листинг кода подхода
- (void)viewDidLoad { |
UIView *contentView; |
contentView = [[UIView alloc] initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)]; |
[scrollView addSubview:contentView]; |
// DON'T change contentView's translatesAutoresizingMaskIntoConstraints, |
// which defaults to YES; |
// Set the content size of the scroll view to match the size of the content view: |
[scrollView setContentSize:CGSizeMake(contentWidth,contentHeight)]; |
/* the rest of your code here... */ |
} |
Создайте представления, Вы хотите вставить довольное представление и сконфигурировать их ограничения, чтобы расположить их в довольном представление.
Также можно создать поддерево представления, чтобы войти в представление прокрутки, установить ограничения и вызвать systemLayoutSizeFittingSize: метод (с опцией UILayoutFittingCompressedSize) для нахождения размера Вы хотите использовать для Вашего довольного представление и contentSize свойство представления прокрутки.
Чистый автоматический подход расположения
Для использования чистого подхода авторасположения делают следующее:
Набор translatesAutoresizingMaskIntoConstraints к НЕ на всех представлениях включается.
Позиция и размер Ваше представление прокрутки с ограничениями, внешними к представлению прокрутки.
Используйте ограничения для разметки подпредставлений в представлении прокрутки, будучи уверенными, что ограничения связывают со всеми четырьмя краями прокрутки, просматривают и не полагаются на представление прокрутки для получения их размера.
Простым примером было бы большое представление изображения, имеющее внутренний размер содержания, полученный из размера изображения. В viewDidLoad методе Вашего контроллера представления Вы включали бы код, подобный коду, показанному в упоминании ниже:
Перечисление 2 чистый автоматический листинг кода подхода расположения
- (void)viewDidLoad { |
UIScrollView *scrollView; |
UIImageView *imageView; |
NSDictionary *viewsDictionary; |
// Create the scroll view and the image view. |
scrollView = [[UIScrollView alloc] init]; |
imageView = [[UIImageView alloc] init]; |
// Add an image to the image view. |
[imageView setImage:[UIImage imageNamed:"MyReallyBigImage"]]; |
// Add the scroll view to our view. |
[self.view addSubview:scrollView]; |
// Add the image view to the scroll view. |
[scrollView addSubview:imageView]; |
// Set the translatesAutoresizingMaskIntoConstraints to NO so that the views autoresizing mask is not translated into auto layout constraints. |
scrollView.translatesAutoresizingMaskIntoConstraints = NO; |
imageView.translatesAutoresizingMaskIntoConstraints = NO; |
// Set the constraints for the scroll view and the image view. |
viewsDictionary = NSDictionaryOfVariableBindings(scrollView, imageView); |
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]]; |
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]]; |
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]]; |
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]]; |
/* the rest of your code here... */ |
} |
Это высказало бы Вам мнение прокрутки, изменившее размеры как измененное представление контроллера представления (такой как на вращении устройства), и представление изображения будет подпредставлением прокрутки. Вы не должны устанавливать размер содержания представления прокрутки.
История версии документа
| Дата | Примечания |
|---|---|
| 20.02.2014 | Фиксированный некоторые типографские ошибки. |
| 08.05.2013 | Новый документ, описывающий, как работать с UIScrollView и авторасположением. |