【发布时间】:2019-08-29 12:46:26
【问题描述】:
我有以下 DatePickerController 的代码:
import UIKit
@objc protocol DatePickerControllerDelegate: AnyObject {
func datePicker(controller: DatePickerController, didSelect date: Date)
func datepickerDidDismiss(controller: DatePickerController)
}
final class DatePickerController: UIViewController {
@objc weak var delegate: DatePickerControllerDelegate?
@objc public var date: Date {
get {
return datePicker.date
}
set(value) {
datePicker.setDate(value, animated: false)
}
}
@objc public lazy var datePicker: UIDatePicker = {
let v = UIDatePicker()
v.datePickerMode = .date
return v
}()
override var preferredContentSize: CGSize {
get {
return datePicker.frame.size
}
set(newValue) {
super.preferredContentSize = newValue
}
}
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(datePicker)
datePicker.autoresizingMask = [.flexibleTopMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleBottomMargin]
view.backgroundColor = .white
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done,
target: self,
action: #selector(DatePickerController.doneButtonDidTap))
navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel,
target: self,
action: #selector(DatePickerController.cancelButtonDidTap))
}
@objc private func doneButtonDidTap() {
delegate?.datePicker(controller: self, didSelect: date)
}
@objc private func cancelButtonDidTap() {
dismiss(animated: true, completion: nil)
delegate?.datepickerDidDismiss(controller: self)
}
}
它在 iPad 上运行良好:
但是,在 iPhone 上,选择器会在 UINavigationBar 下方向上滑动:
用于显示DatePickerController的代码完全相同,两种情况下的样式都是UIModalPresentationStylePopover。
更新:呈现 DatePickerController 的代码:
@objc func presentDatePicker() {
let picker = DatePickerController()
let navC = UINavigationController(rootViewController: picker)
present(navC, animated: true, completion: nil)
}
【问题讨论】:
-
请添加代码以在屏幕中添加 UIPickerView
-
@iMHiteshSurani 我已经用示例代码更新了我的问题
标签: ios user-interface uinavigationbar uidatepicker size-classes