【问题标题】:datePicker is not showing on desired placedatePicker 未显示在所需位置
【发布时间】:2018-08-10 05:05:00
【问题描述】:

我已经创建了我的自定义日期选择器视图,并在其中添加了 UIdatePicker 和两个按钮。 两个按钮都在正确的位置,但日期选择器没有显示在正确的位置

图片中红色区域为日期选择器

这是我的日期选择器代码:

   @objc func datePicker(){

    //DatepickerView
    self.datePickerView.frame = CGRect(x: 5, y: Int(SCREEN_HEIGHT-280), width: Int(SCREEN_WIDTH-10), height: 276)
    self.datePickerView.backgroundColor = UIColor.white
    self.datePickerView.layer.cornerRadius = 8.0
    self.datePickerView.layer.masksToBounds = true
    self.datePickerView.layer.borderWidth = 2;
    self.datePickerView.layer.borderColor = UIColor.black.cgColor;

    doneBtn.addTarget(self, action: #selector(doneClicked), for: .touchUpInside)
    doneBtn.setTitle("Done", for: .normal)
    doneBtn.frame = CGRect(x: 20, y: 10, width: 80, height: 50)
    doneBtn.setTitleColor(UIColor.white, for: .normal)
    doneBtn.backgroundColor = UIColor.black        
   doneBtn.titleLabel?.font = UIFont(name: "Montserrat-Regular", size: 
   16.0)
    doneBtn.layer.cornerRadius = 16.0
    doneBtn.layer.masksToBounds = true
    doneBtn.layer.borderColor = UIColor.clear.cgColor
    doneBtn.layer.borderWidth = 1

    cancelBtn.addTarget(self, action:#selector(cancelClicked), for: .touchUpInside)
    cancelBtn.setTitle("Cancel",for: .normal)
    cancelBtn.frame = CGRect(x: SCREEN_WIDTH-110, y: 10, width: 80, height: 50)
    cancelBtn.setTitleColor(UIColor.white, for: .normal)
    cancelBtn.backgroundColor = UIColor.black
    cancelBtn.titleLabel?.font = UIFont(name: "Montserrat-Regular", size: 16.0)
    cancelBtn.layer.cornerRadius = 16.0
    cancelBtn.layer.masksToBounds = true
    cancelBtn.layer.borderColor = UIColor.clear.cgColor
    cancelBtn.layer.borderWidth = 1

    // DatePicker    
    self.datePicker = UIDatePicker(frame:CGRect(x: 0, y: 0, width: Int(SCREEN_WIDTH-20), height: 200))
    self.datePicker?.backgroundColor = UIColor.red
    self.datePicker?.datePickerMode = UIDatePickerMode.date
    self.datePicker?.layer.masksToBounds = true
    datePicker.center = view.center

        datePickerView.addSubview(datePicker)
        datePickerView.addSubview(doneBtn)
        datePickerView.addSubview(cancelBtn)

        self.view.addSubview(datePickerView)
        datePickerView.isHidden = true;
}

我在 stackoverflow 中尝试了 10 多个答案,但对我没有用。

知道为什么它没有出现在正确的位置

【问题讨论】:

  • 你在哪里定义了SCREEN_HEIGHT
  • 不需要为日期选择器设置框架。只需添加为输入视图
  • 在常量文件中 let SCREEN_WIDTH = UIScreen.main.bounds.width let SCREEN_HEIGHT = UIScreen.main.bounds.height
  • @ShivamTrivedi 是不是要添加完成和取消按钮?
  • 那个链接对我不起作用,我必须放动态高度

标签: ios swift uiview uidatepicker


【解决方案1】:

这是我遇到的 iOS 14 问题,我的 datePicker 只是从屏幕底部向外窥视。我从 PetterBraka 找到了答案here

if #available(iOS 14, *) {
    datePicker.preferredDatePickerStyle = .wheels
    datePicker.sizeToFit()
}
yourTextField.inputView = datePicker

【讨论】:

    【解决方案2】:

    你到底想达到什么目的?

    根据您的代码:

    // DatePicker    
    self.datePicker = UIDatePicker(frame:CGRect(x: 0, y: 0, width: Int(SCREEN_WIDTH-20), height: 200))
    self.datePicker?.backgroundColor = UIColor.red
    self.datePicker?.datePickerMode = UIDatePickerMode.date
    self.datePicker?.layer.masksToBounds = true
    datePicker.center = view.center
    

    您正在根据view self.datePickerView 设置datePicker 框架并将subView 添加到它。但同时您正在添加:

    datePicker.center = view.center
    

    根据self.datePickerViewsubview 的主视图。

    datePicker 超出了该场景的范围。

    你的datePicker y 帧也不能为0。它将重叠donecancel button

    【讨论】:

      【解决方案3】:

      希望这会有所帮助:

      我已经注释了日期选择器中心对齐代码:

              // DatePicker
              self.datePicker = UIDatePicker(frame:CGRect(x: Int(self.doneBtn.frame.origin.x) , y: Int(doneBtn.frame.origin.y + doneBtn.frame.size.height + 10), width: Int(cancelBtn.frame.origin.x + cancelBtn.frame.size.width - self.doneBtn.frame.origin.x), height: 200))
              self.datePicker.backgroundColor = UIColor.red
              self.datePicker.datePickerMode = UIDatePickerMode.date
              self.datePicker.layer.masksToBounds = true
      //        datePicker.center = view.center 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-04
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-31
        相关资源
        最近更新 更多