TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #457 1.21K
Как изменить форму стеклянных кнопок в SwiftUI.

В iOS 26 появились новые Liquid Glass API, включая стиль кнопок .glass. Это сделало кнопки более современными и визуально привлекательными. Но есть один нюанс: вне навигационной панели стеклянная кнопка по умолчанию отображается в виде капсулы. Для текстовых кнопок это хорошо, но для иконок часто хочется сделать круглую форму. У Apple есть готовое решение и это не кастомный стиль.


В чем суть проблемы:

Когда вы используете .buttonStyle(.glass), SwiftUI сам выбирает форму кнопки. В большинстве случаев это капсула. Для маленьких иконок, например переключателя темы или настройки, круглая форма выглядит более естественно.

Можно попытаться обрезать кнопку через .clipShape(.circle), но это не совсем то, что нужно. Обрезка применяется после того, как стиль уже отрисовал кнопку. Эффекты, материалы, подсветка и hover-состояния могут работать некорректно.


Верное решение - buttonBorderShape:

В SwiftUI есть модификатор buttonBorderShape, который задает форму системной плашки кнопки. Он работает с системными стилями, включая .glass.

Button {
// Действие
} label: {
Image(systemName: "sun.max")
}
.buttonBorderShape(.circle)
.buttonStyle(.glass)


Это не обрезка, а указание системе, какую форму использовать для кнопки. Все эффекты и состояния сохраняются.


Доступные варианты:

Модификатор поддерживает несколько предустановленных форм:

🔵.automatic - система решает сама.

🔵.capsule - капсула, подходит для текстовых кнопок.

🔵.circle - круг, хорош для иконок.

🔵.roundedRectangle - скругленный прямоугольник.

🔵.roundedRectangle(radius: 12) - с заданным радиусом.

Можно применять модификатор как к отдельной кнопке, так и к контейнеру. Если повесить на HStack, все кнопки внутри получат одинаковую форму.

HStack {
Button { ... } label: { Image(systemName: "sun.max") }
Button { ... } label: { Image(systemName: "moon") }
}
.buttonBorderShape(.circle)
.buttonStyle(.glass)



🔗 Читать подробнее


💡 Вывод:

.buttonStyle(.glass) дает современный вид, но форма по умолчанию - капсула. Для иконок это не всегда хорошо. Решение - .buttonBorderShape(.circle). Это старый модификатор, но в контексте стеклянных кнопок он работает идеально и не нужно писать кастомный стиль.


Подписаться на канал:
➡️ Telegram | Max
  • 👍 8
  • ❤ 2
  • 🙏 2
  • 🔥 1
More from @hardworkerit
  1. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  2. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
  3. Sep 25, 2026🔢 Приватные свойства больше не ломают memberwise инициализатор в Swift 6.4 Swift автомати…
  4. Sep 24, 2026👨‍💻 Почему разработчики ненавидят своих менеджеров. Всем привет! Сегодня хочу разобрать…
  5. Sep 22, 2026🔢 Релиз Swift 6.4: главные изменения для разработчиков. Swift 6.4 вышел. Это обновление п…
  6. Sep 20, 2026📱 Официальный симулятор iPhone Duo уже доступен в Xcode 27.1 В бета-версии Xcode 27.1 поя…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →