OGeek|极客世界-中国程序员成长平台

标题: ios - UITextField 不会自动调整宽度以适应内容,直到 resignFirstResponder 被调用? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:26
标题: ios - UITextField 不会自动调整宽度以适应内容,直到 resignFirstResponder 被调用?

我不确定为什么会这样,但基本上我有一个静态单元格,它由 UITextField 组成。 inputView 是一个 UIPickerView 并且它的 inputAccessoryType 是一个 UIToolBar

我是这样创建的:

var repeat_ARRAY: [String] = []

override func viewDidLoad()
{
    super.viewDidLoad()

    repeat_ARRAY.append("No Cycle")
    repeat_ARRAY.append("Semi-Monthly")

    toolBar.barStyle = UIBarStyle.default
    toolBar.isTranslucent = true
    toolBar.sizeToFit()

    let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(ViewController.dismissPicker(_ ) )

    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)

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

    createCell()
}

func numberOfComponents(in pickerView: UIPickerView) -> Int
{
    return 1
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
{
    return repeat_ARRAY[row]
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
    textField.text = repeat_ARRAY[row]
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
    return repeat_ARRAY.count
}

func dismissPicker(_ sender: UIBarButtonItem)
{
    textField.resignFirstResponder()
}

func createCell()
{
    textField.text = "No Cycle"
    textField.delegate = self

    let pickerView: UIPickerView = UIPickerView()

    pickerView.delegate = self
    pickerView.dataSource = self

    textField.inputView = pickerView

    textField.inputAccessoryView = toolBar
}

这就是它在 Storyboard中的设置方式:

enter image description here

最初加载 ViewController 时,textField.text 的值为 No Cycle,非常适合。但是,当我滚动 UIPickerView 以选择第二行时,即 Semi-Monthly,文本会像这样被截断:

enter image description here

直到我点击 Done UIBarButtonItem 调用 textField.resignFirstResponder 才知道 textField 的宽度自动扩展以适应字符串 Semi-Monthly 的内容,如下所示: enter image description here

我不太明白为什么会这样?



Best Answer-推荐答案


为您的文本字段设置“前导、尾随、顶部和固定高度约束”,您的问题将得到解决!如果你不能同时设置前导和尾随,那么你应该设置固定宽度。

关于ios - UITextField 不会自动调整宽度以适应内容,直到 resignFirstResponder 被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284605/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4