Я пытаюсь создать определенный макет в SwiftU. Я хочу, чтобы большой заголовок («Обзор месяца») и кнопка действия в собственном стиле («+») отображались на одной и той же горизонтальной линии.
Цель:
Большой заголовок: выравнивание по левому краю, с использованием .largeTitle.weight(.bold).
Большой заголовок: выравнивание по левому краю, с использованием .largeTitle.weight(.bold).
Кнопка: должна иметь тот же стиль, что и собственная кнопка панели инструментов (наследовать глобальный оттенок, правильную толщину шрифта и поведение при взаимодействии с системой).
Выравнивание: они должны находиться на ОДНОЙ СТРОКЕ.
В SwiftUI кажется, что вы можете разместить одну или другую кнопку, но не обе на одной строке:
Если я использую .toolbar: кнопка выглядит идеально (правильно оформлено iOS), но макет ограничен. Заголовок либо центрируется (.principal), либо выносится на отдельную строку (большой режим .navigationTitle). Размещение их обоих на панели инструментов с помощью .topBarLeading и .topBarTrailing не позволяет заголовку быть настоящим bigTitle.
Если я использую собственный заголовок HStack: я могу идеально выровнять их по одной строке
, но кнопка теряет свой родной стиль. Мне приходится
вручную копировать размер, насыщенность и оттенок шрифта. Это хрупко
и не похоже на кнопки панели инструментов,
используемые в других местах приложения (например, кнопка «Назад» или меню с многоточием).
Что было опробовано:
Попытка 1: пользовательский HStack (выравнивание в порядке, стиль НЕПРАВИЛЬНЫЙ)
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
// Button looks perfect here, but is stuck in the nav bar
// while the title is in the ScrollView below it.
}
}
Попытка 3
ZStack / Overlay (невозможно идеально выровнять) Пробовал накладывать кнопку панели инструментов на содержимое прокрутки, но поддерживать ее идеальное соответствие базовой линии текста при прокрутке пользователем или изменении динамического типа - кошмар.
Есть ли способ "заимствовать" собственный стиль кнопки панели инструментов для кнопки, помещенной внутри пользовательского представления, или, наоборот, способ заставить панель навигации разрешить большой заголовок, выровненный по левому краю, и завершающую кнопку на одной горизонтальной линии?
Среда: iOS 26.0+, SwiftUI, Xcode 16+
Я пытаюсь создать определенный макет в SwiftU. Я хочу, чтобы большой заголовок («Обзор месяца») и кнопка действия в собственном стиле («+») отображались на одной и той же горизонтальной линии. Цель: [list] [*]Большой заголовок: выравнивание по левому краю, с использованием .largeTitle.weight(.bold). [*]Большой заголовок: выравнивание по левому краю, с использованием .largeTitle.weight(.bold). [*]Кнопка: должна иметь тот же стиль, что и собственная кнопка панели инструментов (наследовать глобальный оттенок, правильную толщину шрифта и поведение при взаимодействии с системой). [*]Выравнивание: они должны находиться на ОДНОЙ СТРОКЕ. [/list] В SwiftUI кажется, что вы можете разместить одну или другую кнопку, но не обе на одной строке: [list] [*]Если я использую .toolbar: кнопка выглядит идеально (правильно оформлено iOS), но макет ограничен. Заголовок либо центрируется (.principal), либо выносится на отдельную строку (большой режим .navigationTitle). Размещение их обоих на панели инструментов с помощью .topBarLeading и .topBarTrailing не позволяет заголовку быть настоящим bigTitle. [*]Если я использую собственный заголовок HStack: я могу идеально выровнять их по одной строке , но кнопка теряет свой родной стиль. Мне приходится вручную копировать размер, насыщенность и оттенок шрифта. Это хрупко и не похоже на кнопки панели инструментов, используемые в других местах приложения (например, кнопка «Назад» или меню с многоточием). [/list] Что было опробовано: [list] [*]Попытка 1: пользовательский HStack (выравнивание в порядке, стиль НЕПРАВИЛЬНЫЙ) [code]HStack(alignment: .firstTextBaseline) { Text("Monthly Overview").font(.largeTitle.weight(.bold)) Spacer() Menu { ... } label: { Image(systemName: "plus") // Manually styled, never looks quite "native" } } [/code]
[*]Попытка 2: Панель инструментов (стиль в порядке, выравнивание НЕПРАВИЛЬНО) [code].toolbar { ToolbarItem(placement: .topBarTrailing) { // Button looks perfect here, but is stuck in the nav bar // while the title is in the ScrollView below it. } } [/code]
[*]Попытка 3 ZStack / Overlay (невозможно идеально выровнять) Пробовал накладывать кнопку панели инструментов на содержимое прокрутки, но поддерживать ее идеальное соответствие базовой линии текста при прокрутке пользователем или изменении динамического типа - кошмар.
[/list] Есть ли способ "заимствовать" собственный стиль кнопки панели инструментов для кнопки, помещенной внутри пользовательского представления, или, наоборот, способ заставить панель навигации разрешить большой заголовок, выровненный по левому краю, и завершающую кнопку на одной горизонтальной линии? Среда: iOS 26.0+, SwiftUI, Xcode 16+