Создайте приложение, подобное Lego, с помощью SwiftUI - Урок 14
В SwiftUI мы можем построить представление из компонентов subview, перетаскивая их из библиотеки так, чтобы они встали на место по вертикали и горизонтали, как блоки Lego®.
В этом уроке 14 мы добавим текстовые подпредставления, кнопку и изображение для изменения размера.
В предыдущем Уроке 13 мы завершили соединение экземпляров модели новостей Article
с NewsCell
в сцене новостей. Теперь мы создадим ProductCell
для нашей сцены продуктов.
Мы продолжим здесь, где закончился последний урок. В идеале вы выполнили предыдущие уроки этой серии. Или вы можете скачать подготовленный проект, чтобы начать этот урок.
2. Ячейка продукта
Мы собираемся создать ячейку продукта, чтобы отображать изображение, название, описание и цену продукта, а также кнопку для его покупки. Собираем блоки Lego® следующим образом:
В приведенном выше макете показаны заполнители для блоков изображения и текста, которые мы сможем заменить для каждого отдельного экземпляра. Например, чтобы продать мост Харбор-Бридж в Сиднее, мы могли бы заменить блоки изображения и текста, как показано ниже.
👉 В меню «Файл» Xcode выберите New > File
. Выберите шаблонSwiftUI View
и назовите его ProductCell.swift
.
3. Текстовые атрибуты
Теперь мы зададим стиль текстовому подвиду с помощью инспектора атрибутов.
👉 Убедитесь, что панель инспектора атрибутов видна справа. Если нет, нажмите кнопки Show Inspectors
и Show Attributes inspector
в правом верхнем углу (как показано ниже).
👉 В предварительном просмотре щелкните один раз текст Hello, World!
, чтобы выделить его.
👉 В инспекторе атрибутов измените текст на просто слово Text
. Ударь return
. Установите Font
на Title 2
. Установите Font
Weight
на Bold
.
🐞 Вам может потребоваться сначала выбрать Title
, чтобы Xcode также указал Title 2
.
👁 Убедитесь, что ваш код, предварительный просмотр и инспектор атрибутов отображаются, как показано ниже.
4. Добавьте подвиды в вертикальную стопку.
Давайте добавим к нашему представлению другие блоки Lego (подвиды).
👉 Нажмите кнопку «Библиотека» (символ +
) в правом верхнем углу панели предварительного просмотра.
👉 Появится библиотека. Убедитесь, что выбрана вкладка "Представления". Введите слово text
в строку поиска. Выберите в списке элемент Text
, как показано ниже.
👉 Перетащите элемент Text
из библиотеки в область предварительного просмотра, чуть ниже существующего вложенного представления Text
(блок Lego).
👁 Как показано ниже, Xcode показывает, где будет располагаться новое подвид, как один блок Lego под другим.
👁 В коде Xcode добавляет VStack
(вертикальный стек), содержащий исходный Text
и новый Placeholder
текст.
👉 В предварительном просмотре щелкните новое Placeholder
текстовое подпредставление, чтобы увидеть его атрибуты.
👉 В инспекторе атрибутов измените новое представление текста, чтобы оно содержало слова Detail Text
. Нажмите return
, чтобы Xcode применил изменение. Измените Color
на Gray
.
👉 Снова из библиотеки видов перетащите третье подвид текста, чуть ниже Detail Text
. Прежде чем отпустить перетаскиваемый объект, убедитесь, что в подписи внизу указано Insert Text in Vertical Stack
. Если вместо этого написано Add Text to a new Vertical Stack...
, вам нужно переместить указатель на несколько пикселей вверх, пока заголовок не изменится.
👁 Убедитесь, что ваш код выглядит так, как показано ниже, со всеми тремя Text
подпредставлениями всего в одном VStack
. В противном случае отмените действие и попробуйте снова.
👉 В предварительном просмотре щелкните один раз новое Placeholder
текстовое подпредставление. В инспекторе атрибутов измените слова наTertiary Text
и нажмите return
.
5. Вертикальное выравнивание стека
Наша вертикальная стопка содержит три текстовых подпредставления, уложенных друг на друга, как блоки Lego®. По умолчанию VStack
выравнивает свои подвиды по центру, но мы хотим, чтобы VStack
выровнял их по переднему краю (левому краю в английских системах).
👉 В предварительном просмотре выберите VStack
, щелкнув слева или справа от вложенного просмотра Text
. Также можно щелкнуть пустое пространство вдали от текстовых подвидов, а затем один раз в любом месте текстовых подвидов.
👁 Убедитесь, что Xcode показывает VStack
, выбранный в инспекторе кода, предварительного просмотра и атрибутов, как показано ниже.
👉 В инспекторе атрибутов рядом с Alignment
щелкните ведущий (первый) значок.
6. Добавить подпредставление в горизонтальный стек.
👉 Снова покажите библиотеку представлений, но на этот раз найдите элемент Button
(вверху списка). Перетащите Button
в область предварительного просмотра справа от Tertiary Text
. Убедитесь, что полоса вставки отображается только справа от Tertiary Text
, а не всех текстовых подвидов.
👁 Xcode создает HStack
(горизонтальный стек), содержащий рядом Tertiary Text
и Button
.
7. Добавьте растягивающееся изображение в горизонтальную стопку.
👉 Нажмите кнопку +
еще раз, чтобы отобразить библиотеку. Щелкните вкладку Media Library
, чтобы просмотреть ресурсы изображений, доступные в нашем проекте.
👉 Перетащите изображение Sydney
влево от текстовых подвидов. На этот раз убедитесь, что полоса вставки отображается рядом со всеми подвидами текста, как показано ниже.
🐞 Мы могли бы вместо этого перетащить Image
из библиотеки представлений, но по умолчанию используется Image("Image Name")
. Поскольку имя файла "Image Name"
отсутствует в нашем проекте, предварительный просмотр ничего не покажет, что затруднит выбор.
👁 Изображение загружается, но оно настолько велико, что его почти не видно на экране iPhone. Он также выталкивает весь другой контент за пределы экрана.
Нам нужно ограничить изображение шириной 60 точек, заставить его растягиваться / сжиматься по размеру и сохранять его соотношение сторон.
👉 В коде щелкните строку кода Image("Sydney")
. Мы не можем просто щелкнуть, чтобы выбрать его в самом предварительном просмотре, так как он находится за пределами поля.
👉 В инспекторе атрибутов установите Frame
Width
на 60
и нажмите return
.
👁 Как вы можете видеть по высокому прямоугольному контуру, ширина изображения теперь ограничена 60 точками, что позволяет снова разместить остальную часть содержимого. Однако содержимое изображения выходит за пределы своего кадра.
Нам нужно ограничить изображение сжатием / растяжением, чтобы заполнить только его рамку.
👉 В инспекторе атрибутов установите Resizing
Mode
на Stretch
👁 Изображение теперь растягивается по размеру кадра, но искажается - не растягивается по вертикали в той же пропорции, что и по горизонтали.
Мы можем исправить вертикальное / горизонтальное искажение, установив соответствующее соотношение сторон.
👉 В инспекторе атрибутов установите Aspect Ratio
на Fit
.
8. Символ изображения
Поскольку библиотека упрощает добавление только Image
, использующего файл ресурсов, мы использовали изображение Sydney
в качестве заполнителя. Однако лучше было бы показать что-то более общее, например, фото системного изображения. Как мы обсуждали ранее в Учебнике 6, SwiftUI предоставляет тысячи значков SF Symbol, в том числе одну под названием photo.
👉 В коде после Image
выберите ("Sydney")
. Удалите его и снова введите открывающую скобку. Xcode показывает всплывающий список параметров автозаполнения. Прокрутите вниз до параметра Image(systemName:)
и выберите его.
👁 Xcode вводит Image(systemName: String)
с выбранным заполнителемString
.
👉 Заменить String
на "photo"
.
👁 Xcode показывает значок фотографии в качестве изображения-заполнителя в нашей ячейке.
9. Подходящий размер предварительного просмотра
Макет ProductCell
сейчас выглядит неплохо.
Предварительный просмотр отображается на полноэкранном iPhone. Это представление предназначено для того, чтобы быть просто частью полной сцены, поэтому имеет смысл показывать предварительный просмотр только того размера, который соответствует содержимому.
👉 Щелкните в любом месте белого пространства предварительного просмотра, за пределами добавленных вложений.
👉 В инспекторе атрибутов установите Preview
Layout
на Size That Fits
.
🐞 Мы могли бы установить макет предварительного просмотра на Size That Fits
в самом начале, перед добавлением вложенных представлений. Так было бы немного легче управлять. К сожалению, Xcode (по крайней мере до версии 12.5) не позволяет нам перетаскивать вложенные представления внутрь, чтобы добавить внешний VStack
или HStack
, без дополнительного места снаружи. Итак, мы отложили изменение размера предварительного просмотра до тех пор, пока это не было сделано.
10. Измените заголовок кнопки.
Кнопка в настоящее время отображает заголовок по умолчанию Button
. Давайте изменим его на Buy
, чтобы он соответствовал нашему дизайну.
👉 В предварительном просмотре щелкните один раз в Button
.
🐞 Как видите, инспектор атрибутов не позволяет изменить заголовок кнопки. Он просто показывает Argument 2
с отключенной кнопкой.
👉 В коде щелкните Content
под строкой Button
кода. Ударьте delete
на клавиатуре, чтобы удалить его.
👉 Нажмите кнопку +
, чтобы открыть библиотеку. Из библиотеки представлений перетащите подвид Text
в код, где Content
раньше находился в Button
.
👉 В инспекторе атрибутов измените слово Text
с Placeholder
на Buy
и нажмите return
.
👁 Убедитесь, что ваш код и предварительный просмотр отображаются, как показано выше.
11. Зафиксируйте изменения
Как вы это делали раньше:
- 👉 Выберите
Commit
в менюSource Control
. - 👉 Введите описание, например:
ProductCell
- 👉 Нажмите кнопку
Commit
.
12. Далее…
Мы создали ProductCell
, включая подпредставления для текста, изображения и кнопки.
В Урок 15 мы создадим Product
модель, несколько макетов продуктов и покажем их в списке в приложении.
Смотрите предстоящие уроки в Оглавлении. Следуйте за автором, чтобы получать уведомления о других статьях. Если вам понравилась эта статья, похлопайте по ней (до 50 раз).
💬 Если у вас есть какие-либо вопросы или комментарии, пожалуйста, добавьте ответ ниже.
Эта серия выпущена через Next Level Swift. Подпишитесь, чтобы быть в курсе и никогда не пропустите новый учебник из этой серии!
Мы всегда ищем талантливых и увлеченных Swift-разработчиков! Не стесняйтесь заглянуть в раздел нашего писателя и узнать, как вы можете поделиться своими знаниями с сообществом Next Level Swift!