#swift #swiftui #uipickerview #picker
#swift #swiftui #uipickerview #средство выбора
Вопрос:
Я пытаюсь добавить простую функциональность средства выбора с помощью SwiftUI. По сути, результат, который я ищу, выглядит примерно так:
При нажатии на стрелку пользователь должен перейти к новому представлению, где он выбирает требуемую единицу.
Я пробовал что-то вроде этого:
var units = ["ltr", "usg", "impg"]
@State private var selectedUnit = 0
var body: some View {
Form {
Section {
VStack {
Picker(selection: $selectedUnit, label: Text("")) {
ForEach(0 ..< units.count) {
Text(self.units[$0])
}
}.frame(width: 42)
}
}
}.navigationBarTitle("Select unit")
}
Но как только это завернуто в форму, для этого требуется заголовок и т. Д. И Занимает слишком много места. Я просто хочу, чтобы единицы измерения были моим базовым представлением. Есть ли какой-либо способ добиться этого?
Комментарии:
1. Непонятно, что вы имеете в виду. Не могли бы вы предоставить более подробную информацию о том, чего вы пытаетесь достичь, может быть, какой-нибудь макет?
2. Таким образом, в принципе пользователь должен иметь возможность изменять единицы измерения с кг на литр, usg или impg. Для этого они должны нажать на стрелку рядом с kg (см. Снимок экрана выше), и это приведет их к новому навигационному контроллеру, где они выберут единицу измерения. Затем они нажимают назад, чтобы вернуться к основному виду. По сути, я полагаю, что это новый инструмент выбора iOS по умолчанию, заменяющий wheelPicker? В принципе, как и любой сборщик в приложении настроек iOS
3. Хорошо, вот как это работает в форме, так что не так?
4. Так что, по сути, мне нужен только выбираемый элемент. Пространство, которое у меня есть в стеке, имеет ширину всего около 40 точек, но в форме вам нужно указать заголовок, например, «единицы измерения» и т. Д. Все, что мне нужно, это фактическая метка единицы измерения и стрелка
5. Затем просто сделайте это вручную NavigationLink и List в представлении назначения.
Ответ №1:
Передайте EmptyView
экземпляр в качестве метки Picker
, чтобы скрыть заголовок вверху:
Picker(selection: $selectedUnit, label: EmptyView()) {
ForEach(0 ..< units.count) {
Text(self.units[$0])
}
}
Ответ №2:
Picker("", selection: $data) {
ForEach(data, id:self) { child in
Text(child)
}
}
.pickerStyle(InlinePickerStyle())
.labelsHidden()
Попробуйте .labelsHidden()