8

我们正在使用 xcode 11 beta 5 中的 Catalyst swift 将我们的 iOS 应用程序转换为兼容 macCatalyst。

我们面临的问题是默认 DatePicker 未显示在窗口中。

我正在为 mac 尝试这个解决方案,它会在视图中添加日期选择器,但我想要另一个合适的解决方案。还有什么建议吗?

func datepickerWillLoad() {
        self.datePicker.datePickerMode = .date
        self.datePicker.maximumDate = Date()
        self.datePicker.backgroundColor = UIColor.Theme.lightBackground
        self.datePicker.setValue(UIColor.Theme.whiteColor, forKeyPath: "textColor")
        self.datePicker.addTarget(self, action: #selector(didChangedDatePickerValue), for: .valueChanged)

        //if user open picker and without change click on done
        self.dateOfBirthTextField.addTarget(self, action: #selector(didChangedDatePickerValue), for: .editingDidEnd)

        #if targetEnvironment(macCatalyst)
            datePicker.frame = CGRect(x: 0, y: self.view.frame.height - 200 , width: self.view.frame.width, height: 200)
            self.view.addSubview(datePicker)
        #else
            self.dateOfBirthTextField.inputView = datePicker
        #endif
    }
4

2 回答 2

1

在我看来,问题的原因是 UIDatePicker 已被重新设计为紧凑型控制器,而不是 iOS 典型的滚轮(可能从 Mac Catalyst 13.4+ 开始)。因此,颜色方案不能再通过 setValue 函数应用于不存在的车轮并导致错误。

所以我试图让滚轮模式回到我的 UIDatePicker。因此,我在我的 UIDatePicker 中添加了以下行,这为我解决了这个问题:

if #available(macCatalyst 13.4, *) {
    myDatePicker.preferredDatePickerStyle = .wheels
    myDatePicker.datePickerMode = .date
} else {
    // Fallback on earlier versions
}

对于早期版本,我以前没有这个问题,所以我希望解决方案很好,但是如果您也遇到早期版本的问题,请发表评论,以便我可以调整我的代码!:-)

注意:我注意到更改preferredDatePickerStyle 后datePickerMode 设置为默认模式,因此请确保之后强制使用datePickerMode!

于 2020-07-12T13:27:09.627 回答
0

我发现如果我使用 self.datePicker.setValue(UIColor.Theme.whiteColor, forKeyPath: "textColor") 设置日期选择器文本颜色,那么这会导致应用程序在加载视图时崩溃。尝试删除那行代码,它应该可以与 mac 催化剂一起使用。

于 2020-04-07T00:23:31.713 回答