#xcode #swiftui
Вопрос:
Если я попытаюсь открыть этот указатель даты, представление будет прыгать во время перехода, прежде чем перейти в фиксированное положение. В консоли также отображается длинное сообщение об ошибке …»Не в состоянии одновременно удовлетворять ограничениям»….
Если я только покажу .компонент даты этой проблемы нет. Является ли это внутренней проблемой? Если да, то как я могу заархивировать такое же поведение, потому что мне нужен выбор даты и времени без всплывающего окна сведений для более быстрого выбора.
Спасибо за любую помощь 🙂
https://imgur.com/a/IEy2syY (При нажатии на вторую кнопку происходит неправильный переход)
struct ContentView: View {
@State var toggle = false
@State var date = Date(timeIntervalSinceNow: 0)
var body: some View {
ZStack{
Button("sdflkj"){
toggle.toggle()
}
VStack{
Spacer()
if toggle{
DatePicker("lsadjf", selection: $date, displayedComponents: [.date,.hourAndMinute])
.labelsHidden()
.datePickerStyle(GraphicalDatePickerStyle())
}
}
}
}
}
Ответ №1:
Похоже, это ошибка, вызванная перекрытием Button
и DatePicker
.
Протестировано с помощью симулятора iPhone 12
struct ContentView: View {
@State var toggle = false
@State var date = Date(timeIntervalSinceNow: 0)
var body: some View {
ZStack{
Button("Button"){
// add `withAnimation()`
withAnimation(.easeIn) {
toggle.toggle()
}
}
.offset(y: -50) // set y offset for prevent overlapping of Button and DatePicker
VStack{
Spacer()
if toggle {
DatePicker("", selection: $date, displayedComponents: [.date,.hourAndMinute])
.padding()
.labelsHidden()
.datePickerStyle(GraphicalDatePickerStyle())
.zIndex(5) // or add .zIndex for prevent overlapping of Button and DatePicker
}
}
}
}
}
Комментарии:
1. В приложении большего размера указатель даты должен отображаться поверх другого вида, как полноэкранная обложка, но на листе. Из-за этого я думаю, что невозможно избежать дублирования. Там я попробовал использовать ZStack и условный оператор.
2. @sheldor Я обновляю свой пост. Вы можете попробовать использовать
.zindex()
для этого. Однако кнопка «уволить» не будет невидимой или кликабельной, но на ней должна быть кнопка «уволить»fullScreenCover
. Так что не было бы никаких проблем3. Хорошо, я это проверил. При выполнении этого на симуляторе iPhone 11 появляется сообщение об ошибке консоли, а при выполнении на sim-карте iPhone 12 сообщения нет. Но все еще есть этот скачкообразный переход, который выглядит неправильно.
4. @sheldor Для решения этой проблемы, пожалуйста, добавьте дополнительную информацию о проблеме анимации, о которой вы говорите, добавьте еще немного кода или видео нужной анимации или анимации, которая происходит. Когда я запускаю его, анимация, кажется, работает нормально.
5. Я добавил ссылку здесь