子视图的位置不是我所期望的

The position of subview was not what I expected

我添加了一个日期选择器作为子视图,我期望的是当我按下 "change date" 按钮时,日期选择器会显示在视图的底部。但现实是simulation result.

@IBAction func onUpdateBirthday(sender: UIButton) {
    showChooseBirthday()
}

func showChooseBirthday() {

    view.addSubview(chooseBirthday)

    let bottomConstraint = chooseBirthday.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor)
    let leftConstraint = chooseBirthday.leftAnchor.constraintEqualToAnchor(view.leftAnchor)
    let rightConstraint = chooseBirthday.rightAnchor.constraintEqualToAnchor(view.rightAnchor)
    let heightContraint = chooseBirthday.heightAnchor.constraintEqualToConstant(60)
    NSLayoutConstraint.activateConstraints([bottomConstraint,leftConstraint,rightConstraint,heightContraint])
    view.layoutIfNeeded() // re-layout the view

    self.chooseBirthday.alpha = 0
    UIView.animateWithDuration(0.4) {
        self.chooseBirthday.alpha = 1
    }

这里是a part of storyboard

尝试在代码中将 translatesAutoresizingMaskIntoConstraints 更改为 No

您应该使用文本字段而不是按钮。并将 pickerview 设置为文本字段的 inputview,这样当您点击文本字段时它将打开 yourdatepicker 而不是 keyboard

如果您对此不太了解,那么 google 有很多可用的教程。

并且在您的代码中,您应该将 translatesAutoresizingMaskIntoConstraints 设置为 NO

希望这会有所帮助。

正如其他人所说,您可以将日期选择器添加到 UITextField。下面是一个例子,希望对你有帮助。 Result here

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var birthdayTextField: UITextField!
    var birthdayPicker = UIDatePicker()

    override func viewDidLoad() {
        super.viewDidLoad()
            configureBirthdayPicker()
        }

    func configureBirthdayPicker(){

        birthdayPicker.datePickerMode = .Date
        birthdayPicker.maximumDate = NSDate()
        birthdayPicker.tintColor = UIColor.blackColor()
        birthdayPicker.backgroundColor = UIColor.groupTableViewBackgroundColor()

        let toolBar = UIToolbar()
        toolBar.barTintColor = UIColor.groupTableViewBackgroundColor()
        toolBar.barStyle = UIBarStyle.Default
        toolBar.translucent = true
        toolBar.tintColor = UIColor.blueColor()
        toolBar.sizeToFit()

        let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePicker:")
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
        let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelPicker:")

        toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
        toolBar.userInteractionEnabled = true

        birthdayTextField.inputView = birthdayPicker
        birthdayTextField.inputAccessoryView = toolBar

    }

    func donePicker(doneclicked:UIButton){
        print("done clicked")
        birthdayTextField.resignFirstResponder()
    }

    func cancelPicker(cancelclicked:UIButton){
        print("cancel clicked")
        birthdayTextField.resignFirstResponder()
    }
}