UICalendarView vs SwiftUI DatePicker неправильный размер в боковой панели NavigationSplitView
Поскольку мне нужно добавить значки к определенным датам, мне нужно использовать репрезентативное, однако при использовании этого вNavigationSplitView
боковая панель, ширинаUICalendarView
неверно... в отличие от графического DatePicker, который должен быть одним и тем же компонентом, макет правильно
В области сведений макет такой же, проблема возникает с меньшим горизонтальным пространством.
Как это исправить?
struct CalendarUI: UIViewRepresentable {
let interval: DateInterval
func makeUIView(context: Context) -> UICalendarView {
let view = UICalendarView()
view.calendar = Calendar.current
view.availableDateRange = interval
return view
}
func updateUIView(_ uiView: UICalendarView, context: Context) {
}
}
struct SidebarUI: View {
@State private var date = Date()
var body: some View {
VStack {
CalendarUI(interval: DateInterval(start: .distantPast, end: .distantFuture))
.fixedSize(horizontal: true, vertical: true)
DatePicker(
"Start Date",
selection: $date,
displayedComponents: [.date]
)
.datePickerStyle(.graphical)
}.padding()
}
}
1 ответ
У меня была та же проблема, что и у вас:UICalendarView
когда завернут вUIViewRepresentable
для использования в SwiftUI не меняет свой размер должным образом и пытается занять всю ширину.
Для меня работает следующее решение: Вfunc makeUIView(context: Context) -> UICalendarView
добавьте строки ниже:
// Make sure our calendar view adapts nicely to size constraints.
view.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
view.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
Далее я изменил.fixedSize
модификатор не применяется к горизонтальной оси!
CalendarUI(interval: DateInterval(start: .distantPast, end: .distantFuture))
.fixedSize(horizontal: false, vertical: true)