Упаковка контента в прокручиваемое представление
Наша задача — организовать прокрутку представления, когда некоторые элементы скрываются под клавиатурой. Для этого мы добавим в приложение класс UlScrollView и укажем ему, какие элементы (во внутреннем представлении) он должен обрабатывать.
Конечно, мы не первые, кому потребовалось преобразовать уже готовое представление в прокручиваемое. В Interface Builder существует встроенная поддержка «упаковки» существующих представлений в UlScrollView.
Выделите все виджеты в детализированном представлении (как показано на иллюстрации) и выполните команду меню Editor Embed—Scroll View. Interface Builder автоматически создает новое прокручиваемое представление и размещает на нем все виджеты в исходных местах.
Interface Builder создает представление UlScrollView с минимальными размерами, достаточными для размещения всех компонентов. Так как прокручиваться должно все представление, захватите углы нового представления UlScrollView и перетащите их в углы экрана, до границы с навигационной панелью (которая прокручиваться не должна).
Откуда новое прокручиваемое представление узнает, какую часть контента нужно прокрутить?
Размеры прокручиваемого представления совпадают с размерами экрана.
Interface Builder создает представление UlScrollView, но нам необходимо нанести ряд завершающих штрихов. Нужно сообщить UlScrollView размер внутренней области, чтобы представление знало, что ему придется прокручивать. Для этого следует задать значение свойства contentSize. Затем необходимо добавить ссылку и свойство для UlScrollView и связать их в Interface Builder для последующих обращений.
Как определить размер contentSize? Когда размер UlScrollView совпадает с размером экрана, за пределами видимой области нет ничего, о чем ему приходилось бы беспокоиться. А так как размер прокручиваемого представления совпадает с размером представления UlView, в которое оно «упаковано», мы можем взять размер от него: scrollView.contentSize = self.view.frame.size;
После добавления этой строки наше прокручиваемое представление занимает все доступное место и считает, что его область контента имеет такой же размер.
Включите в DrinkDetailViewController атрибут scrollView для хранения ссылки на UlScrollView. Объявите поле и свойство IBOutlet, включите директиву @synthesize в файл и освободите ссылку в dealloc.
Свяжите новое свойство с UlScrollView в Interface Builder — включите в UlScrollView новую связь Referencing Outlet со свойством scrollView.
- Дата: 20-12-2014, 18:48