Search code examples
iosswiftuiviewuidatepicker

datePicker is not showing on desired place


i have created my custom datepicker view and added UIdatePicker and two buttons in it. both buttons are on the right place as desired but date picker is not showing on its right place

enter image description here

in image Red area is datepicker

here is my code for datepicker:

   @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;
}

i have tried more than 10 answers in stackoverflow, but did not worked for me.

Any idea why it is not appearing on right place


Solution

  • What exactly you are trying to achieve ?

    According to your code :

    // 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
    

    you are setting datePicker frame according to the view self.datePickerView and adding as subView to it. But at the same time you are adding:

    datePicker.center = view.center
    

    according to the main view which has self.datePickerView as subview.

    datePicker is out of the scope in that scenario.

    Also your datePicker y frame can not be 0. It will overlap done and cancel button.