Как бы я поместил все элементы в сегментный элемент управления? - PullRequest
0 голосов
/ 23 сентября 2019

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

Я искал способыизмените размер сегмента на основе текста, а также попытайтесь изменить фрейм каждого сегмента.

struct BundleView: View {

    let areas = ["Crafts Room", "Pantry", "Fish Tank", "Boiler Room", "Bulletin Board", "Vault"]

    @State var selectedArea = 0

    var body: some View {
        Picker(selection: $selectedArea, label: EmptyView()) {
            ForEach(0..<areas.count) { index in
                Text(self.areas[index]).tag(index)
            }
        }.pickerStyle(SegmentedPickerStyle())

    }
}

Текущее отображение

Это то, как он в настоящее время выглядит вПортретный режим.Из 6 отображаемых элементов только 4.

Пейзажный режим покажет все сегменты, что я и хочу.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

TL; DR

Вы не можете поместить весь свой текст "как есть" в сегментированный сборщик, потому что дизайнеры SwiftUI не создавали сегментированные сборщики, чтобы иметь так многопараметры.У вас есть пара вариантов.

Изображения

Как предлагает dasblinkenlight, вы можете заменить текст небольшими изображениями, которые должны соответствовать 6 вариантам:

struct BundleView: View {

    let areas = ["a.circle", "b.circle", "c.circle", "d.circle", "e.circle", "f.circle"]

    @State var selectedArea = 0

    var body: some View {
        Picker(selection: $selectedArea, label: EmptyView()) {
            ForEach(0..<areas.count) { index in
                Image(systemName: self.areas[index]).tag(index)
            }
        }.pickerStyle(SegmentedPickerStyle())
    }
}

enter image description here

Пользовательский элемент управления

Вы можете создать пользовательский элемент управления.Вот крутой дизайн с анимацией от swiftui-lab.com :

Custom Control

Но почему я не могу использоватьСредство выбора?

SwiftUI, как правило, имеет два типа представлений:

  1. Те, которые предназначены для легкой модификации и компоновки, обеспечивая неограниченную настраиваемость для уникального внешнего вида.
  2. Те, которые предназначены для обеспечения стандартного, непротиворечивого отношения к какому-либо типу взаимодействия, независимо от того, в каком приложении они используются.

Примером типа 1 может быть текст.Вы можете изменить размер шрифта, вес, шрифт, цвет, фон, отступы и т. Д. Он предназначен для его изменения.

Примером типа 2 может быть Picker.Вы не можете напрямую контролировать ширину элемента, вы не можете изменить отступы вокруг представлений, вы не можете сказать, что это переносится на несколько строк и т. Д. Они не хотят, чтобы он был очень настраиваемым, потому что тогда средства выбора каждого приложения будутведут себя по-разному, побеждая цель стандартного элемента управления.

Сегментированные сборщики работают лучше всего с 2-4 элементами, описания которых относительно короткие. Если вы хотите что-то за пределами этого, вам нужно сделатьпользовательский элемент управления.

0 голосов
/ 23 сентября 2019

Один из способов выдвинуть больше информации на одно и то же пространство экрана - использовать картинки вместо слов:

  • Создайте шесть значков, соответствующих местоположениям в вашем сегментированном элементе управления (Комната ремесел, Кладовая и т. Д.)
  • Заменить текстовые сегменты на графические,
  • При необходимости добавьте текст только для чтения над сегментированным элементом управления, чтобы разъяснить значение выбранного в данный момент значка.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...