具有.compact样式的UIDatePicker不尊重包含优先权的内容

问题描述

我认为具有UIDatePicker样式的新.compact(iOS 14+)在AutoLayout中无法正常使用。

使用UILabelUIDatePicker进行简单布局,其中UIDatePicker具有更高的内容拥抱优先级,如果布局UILabel被拉伸,则会导致布局{可用空间过多,但事实并非如此。

这就是我得到的结果:

UIDatePicker is stretched but it shouldn't be

以下是示例代码

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,label.bottomAnchor.constraint(equalTo: datePicker.bottomAnchor),label.trailingAnchor.constraint(equalTo: datePicker.leadingAnchor,constant: -8),datePicker.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor,datePicker.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor,constant: -8)
        ])
    }
}

我错过了什么吗?这是一个已知问题吗?

解决方法

对我来说很好。将标签的水平内容包含优先级设置为AuthType Basic

enter image description here

,

我有一个非常相似的问题,但此解决方案未解决该问题。我在一个小项目中进行了复制并推入了 a github repo

UI 包含一个垂直 UIStackView,其中包含两个 UITextView,内容拥抱优先级为 249 和 248,一个 DatePicker 内容拥抱优先级为 750。当我运行应用程序并检查视图层次结构时,我可以看到拥抱优先级值保留,但视图如下所示。

非常欢迎任何建议!

enter image description here