具有图形样式的DatePicker打破了iOS 16.0上的布局限制

问题描述 投票:0回答:2

以下代码在 iOS 16.0 的 Xcode-14.0.0-Beta 5 上运行时打破了布局约束

struct ContentView: View {
    
    @State var date = Date()
    
    var body: some View {
        DatePicker(selection: $date, displayedComponents: .date, label: { EmptyView() })
            .datePickerStyle(.graphical)
    }
}

有什么建议如何修复或隐藏警告吗?

控制台警告:

2022-08-24 17:16:40.471325+0300 DatePickerProblem[77364:483284] [LayoutConstraints] 无法同时满足约束。 可能至少以下列表中的约束之一是您不想要的。 尝试这个: (1) 查看每个约束并尝试找出您不期望的约束; (2) 找到添加了不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性的文档translatesAutoresizingMaskIntoConstraints) ( “”, “”, "=0)-[_UIDatePickerCompactTimeLabel:0x7fe15c322bc0](活动,名称:'|':_UIDatePickerCalendarTimeView:0x7fe15c322520)>" ) 将尝试通过打破约束来恢复 在 UIViewAlertForUnsatisfiableConstraints 处设置一个符号断点以在调试器中捕获此情况。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能有所帮助。 2022-08-24 17:16:40.471971+0300 DatePickerProblem[77364:483284] [LayoutConstraints] 无法同时满足约束。 可能至少以下列表中的约束之一是您不想要的。 尝试这个: (1) 查看每个约束并尝试找出您不期望的约束; (2) 找到添加了不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性的文档translatesAutoresizingMaskIntoConstraints) ( “”, “”, "=0)-[UILabel:0x7fe15c324d00](活动,名称:'|':_UIDatePickerCalendarTimeView:0x7fe15c322520)>" ) 将尝试通过打破约束来恢复 在 UIViewAlertForUnsatisfiableConstraints 处设置一个符号断点以在调试器中捕获此情况。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能有所帮助。 2022-08-24 17:16:40.478778+0300 DatePickerProblem[77364:483284] [LayoutConstraints] 无法同时满足约束。 可能至少以下列表中的约束之一是您不想要的。 尝试这个: (1) 查看每个约束并尝试找出您不期望的约束; (2) 找到添加了不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性的文档translatesAutoresizingMaskIntoConstraints) ( "<_UISystemBaselineConstraint:0x60000355c190 H:[UILabel:0x7fe15c324d00]-(>=NSLayoutAnchorConstraintSpace(8))-[_UIDatePickerCompactTimeLabel:0x7fe15c322bc0] (活动)>", “”, “”, “”, “”, “” ) 将尝试通过打破约束来恢复 <_UISystemBaselineConstraint:0x60000355c190 H:[UILabel:0x7fe15c324d00]-(>=NSLayoutAnchorConstraintSpace(8))-[_UIDatePickerCompactTimeLabel:0x7fe15c322bc0] (活动)> 在 UIViewAlertForUnsatisfiableConstraints 处设置一个符号断点以在调试器中捕获此情况。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能有所帮助。 2022-08-24 17:16:40.512015+0300 DatePickerProblem[77364:483284] [UICalendarView] UICalendarView 的高度小于它可以渲染其内容的高度;默认为最小高度。 2022-08-24 17:16:40.548888+0300 DatePickerProblem[77364:483284] [UICalendarView] UICalendarView 的高度小于它可以渲染其内容的高度;默认为最小高度。

ios swift swiftui datepicker ios16
2个回答
7
投票

新的底层

UICalendarView
在其 SwiftUI
DatePicker
包装器使用时似乎存在一些自动布局问题。

当您也启用时间组件时,您可以更好地看到这一点 (

displayedComponents: [.date, .hourAndMinute]
)。这会给出更长的自动布局警告,提示时间标签约束被破坏。

对我来说,这种情况尤其发生在使用

UIHostingController
嵌入 SwiftUI 视图并推送到导航堆栈上时。

就我而言,我可以通过将 DatePicker 的默认宽度作为其框架宽度来修复它:

struct ContentView: View {
    
    @State var date = Date()
    
    var body: some View {
        DatePicker(
            selection: $date, 
            displayedComponents: [.date, .hourAndMinute], 
            label: { EmptyView() }
        )
        .datePickerStyle(.graphical)
        .frame(width: 320) // Bugfix for AutoLayout-Issue
    }

}

0
投票
struct ContentView: View {

@State var date = Date()

var body: some View {
    DatePicker(selection: $date, displayedComponents: .date, label: { EmptyView() })
        .datePickerStyle(.graphical)
        .padding()
}

.padding()
停止对我发出警告。

© www.soinside.com 2019 - 2024. All rights reserved.