Как сохранить большой заголовок и кнопку панели инструментов на одной строке, сохраняя при этом собственный стиль кнопкиIOS

Программируем под IOS
Ответить
Anonymous
 Как сохранить большой заголовок и кнопку панели инструментов на одной строке, сохраняя при этом собственный стиль кнопки

Сообщение Anonymous »

Я пытаюсь создать определенный макет в SwiftU. Я хочу, чтобы большой заголовок («Обзор месяца») и кнопка действия в собственном стиле («+») отображались на одной и той же горизонтальной линии.
Цель:
  • Большой заголовок: выравнивание по левому краю, с использованием .largeTitle.weight(.bold).
  • Большой заголовок: выравнивание по левому краю, с использованием .largeTitle.weight(.bold).
  • Кнопка: должна иметь тот же стиль, что и собственная кнопка панели инструментов (наследовать глобальный оттенок, правильную толщину шрифта и поведение при взаимодействии с системой).
  • Выравнивание: они должны находиться на ОДНОЙ СТРОКЕ.
В SwiftUI кажется, что вы можете разместить одну или другую кнопку, но не обе на одной строке:
  • Если я использую .toolbar: кнопка выглядит идеально (правильно оформлено iOS), но макет ограничен. Заголовок либо центрируется (.principal), либо выносится на отдельную строку (большой режим .navigationTitle). Размещение их обоих на панели инструментов с помощью .topBarLeading и .topBarTrailing не позволяет заголовку быть настоящим bigTitle.
  • Если я использую собственный заголовок HStack: я могу идеально выровнять их по одной строке
    , но кнопка теряет свой родной стиль. Мне приходится
    вручную копировать размер, насыщенность и оттенок шрифта. Это хрупко
    и не похоже на кнопки панели инструментов,
    используемые в других местах приложения (например, кнопка «Назад» или меню с многоточием).
Что было опробовано:
  • Попытка 1: пользовательский HStack (выравнивание в порядке, стиль НЕПРАВИЛЬНЫЙ)

    Код: Выделить всё

    HStack(alignment: .firstTextBaseline) {
    Text("Monthly Overview").font(.largeTitle.weight(.bold))
    Spacer()
    Menu { ... } label: {
    Image(systemName: "plus") // Manually styled, never looks quite "native"
    }
    }
    
  • Попытка 2: Панель инструментов (стиль в порядке, выравнивание НЕПРАВИЛЬНО)

    Код: Выделить всё

    .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+

Подробнее здесь: https://stackoverflow.com/questions/798 ... erving-nat
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»