#ios #xcode #datepicker #swiftui #picker
#iOS #xcode #datepicker #swiftui #сборщик
Вопрос:
Мне нужно создать представление, в котором есть 2 Pickers
и 2 DatePickers
.
Чтобы избежать их наложения друг на друга, я использовал .clipped()
. Однако это не работает.
Я могу успешно изменить размер pickers
, но я не могу ограничить «область выделения» их frame
размером.
Вот мой код:
VStack(spacing: 10) {
Picker(selection: self.$dayTypeSelectedIndex, label: Text("")) {
ForEach(0 ..< self.dayTypes.count, id: .self) {
Text(self.dayTypes[$0])
.foregroundColor(Color.black)
}
}
.pickerStyle(SegmentedPickerStyle())
.labelsHidden()
.clipped()
Spacer()
Group {
DatePicker("", selection: self.$dateIntervalStart, displayedComponents: .hourAndMinute)
.labelsHidden()
.colorInvert()
.colorMultiply(Color.black)
.frame(maxHeight: 50)
.clipped()
Spacer()
Text("às")
.foregroundColor(Color.black)
Spacer()
DatePicker("", selection: self.$dateIntervalEnd, displayedComponents: .hourAndMinute)
.labelsHidden()
.colorInvert()
.colorMultiply(Color.black)
.frame(maxHeight: 50)
.clipped()
}
Spacer()
HStack {
Picker(selection: self.$tripNotificationDelta, label: Text("")) {
ForEach(0...60, id: .self) {
Text($0 < 10 ? "0($0)" : "($0)")
.foregroundColor(Color.black)
}
}
.labelsHidden()
.frame(maxWidth: 50, maxHeight: 50)
.clipped()
Text("mins before trip")
.foregroundColor(Color.black)
}
}
}
Что я делаю не так?
Я использую XCode 12. Кроме того, этот интерфейс создается для устройств, не работающих под управлением iOS 14.
Спасибо!
Ответ №1:
Итак, я понял это. Просто поставьте .compositingGroup()
перед .clipped()
. Что-то вроде этого:
DatePicker("", selection: self.$dateIntervalEnd, displayedComponents: .hourAndMinute)
.labelsHidden()
.colorInvert()
.colorMultiply(Color.black)
.frame(maxHeight: 50)
.compositingGroup()
.clipped()
Комментарии:
1. Это исправление также сработало для меня для обрезки изображений в iOS 14
2. Отличная находка. Спасибо!!!
Ответ №2:
Как упоминалось здесь
Добавление этого простого расширения решает проблему с перекрывающимися областями прокрутки. Вам не нужно добавлять .compositingGroup()
и .clipped()
extension UIPickerView {
override open var intrinsicContentSize: CGSize {
return CGSize(width: UIView.noIntrinsicMetric, height: super.intrinsicContentSize.height)
}
}