【发布时间】:2021-01-08 10:47:21
【问题描述】:
我认为带有.compact 样式的新UIDatePicker (iOS 14+) 不能与AutoLayout 一起正常工作。
使用UILabel 和UIDatePicker 制作一个简单的布局,其中UIDatePicker 具有更高的内容拥抱优先级,如果有太多可用空间,则应该会导致UILabel 被拉伸的布局,但事实并非如此会发生什么。
这就是我得到的结果:
这里是示例代码:
class ViewController: UIViewController, UIGestureRecognizerDelegate {
private let label: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Label"
label.backgroundColor = .yellow
return label
}()
private let datePicker: UIDatePicker = {
let datePicker = UIDatePicker()
datePicker.translatesAutoresizingMaskIntoConstraints = false
datePicker.preferredDatePickerStyle = .compact
return datePicker
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(label)
view.addSubview(datePicker)
label.setContentHuggingPriority(.defaultLow, for: .horizontal)
datePicker.setContentHuggingPriority(.defaultLow + 1, for: .horizontal)
NSLayoutConstraint.activate([
label.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 8),
label.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 8),
label.bottomAnchor.constraint(equalTo: datePicker.bottomAnchor),
label.trailingAnchor.constraint(equalTo: datePicker.leadingAnchor, constant: -8),
datePicker.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 8),
datePicker.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -8)
])
}
}
我错过了什么吗?这是一个已知问题吗?
【问题讨论】:
-
您假设日期选择器具有基于其文本的固有内容大小宽度,例如标签。但我们为什么要期待呢?
-
@matt,我希望这是因为 Apple 的文档中的这一点
You should integrate date pickers in your layout using Auto Layout. Although date pickers can be resized, they should be used at their intrinsic content size.developer.apple.com/documentation/uikit/uidatepicker -
好的,谢谢。我进行了实验,对我来说这按预期工作。
标签: ios autolayout uikit uidatepicker