具有 .compact 样式的 UIDatePicker 不尊重内容拥抱优先级
UIDatePicker with .compact style doesn't respect content hugging priority
我认为具有 .compact
样式的新 UIDatePicker
(iOS 14+)无法与 AutoLayout 一起正常工作。
使用 UILabel
和 UIDatePicker
制作一个简单的布局,其中 UIDatePicker
具有更高的内容拥抱优先级应该会导致 UILabel
被拉伸的布局如果可用的 space 太多,但事实并非如此。
这是我得到的结果:
示例代码如下:
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)
])
}
}
我错过了什么吗?这是一个已知问题吗?
对我来说很好用。将标签的水平内容拥抱优先级设置为 .defaultLow-1
.
我认为具有 .compact
样式的新 UIDatePicker
(iOS 14+)无法与 AutoLayout 一起正常工作。
使用 UILabel
和 UIDatePicker
制作一个简单的布局,其中 UIDatePicker
具有更高的内容拥抱优先级应该会导致 UILabel
被拉伸的布局如果可用的 space 太多,但事实并非如此。
这是我得到的结果:
示例代码如下:
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)
])
}
}
我错过了什么吗?这是一个已知问题吗?
对我来说很好用。将标签的水平内容拥抱优先级设置为 .defaultLow-1
.