菜鸟教程小白 发表于 2022-12-11 19:26:52

ios - UITextField 不会自动调整宽度以适应内容,直到 resignFirstResponder 被调用?


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

<p>我是这样创建的:</p>

<pre><code>var repeat_ARRAY: = []

override func viewDidLoad()
{
    super.viewDidLoad()

    repeat_ARRAY.append(&#34;No Cycle&#34;)
    repeat_ARRAY.append(&#34;Semi-Monthly&#34;)

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

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

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

    toolBar.setItems(, animated: false)
    toolBar.isUserInteractionEnabled = true

    createCell()
}

func numberOfComponents(in pickerView: UIPickerView) -&gt; Int
{
    return 1
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -&gt; String?
{
    return repeat_ARRAY
}

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

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

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

func createCell()
{
    textField.text = &#34;No Cycle&#34;
    textField.delegate = self

    let pickerView: UIPickerView = UIPickerView()

    pickerView.delegate = self
    pickerView.dataSource = self

    textField.inputView = pickerView

    textField.inputAccessoryView = toolBar
}
</code></pre>

<p>这就是它在 Storyboard中的设置方式:</p>

<p> <a href="/image/pP51c.png" rel="noreferrer noopener nofollow"><img src="/image/pP51c.png" alt="enter image description here"/></a> </p>

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

<p> <a href="/image/Y7Qrk.png" rel="noreferrer noopener nofollow"><img src="/image/Y7Qrk.png" alt="enter image description here"/></a> </p>

<p>直到我点击 <strong>Done</strong> <code>UIBarButtonItem</code> 调用 <code>textField.resignFirstResponder</code> 才知道 <code>textField</code> 的宽度自动扩展以适应字符串 <strong>Semi-Monthly</strong> 的内容,如下所示:
<a href="/image/gVplX.png" rel="noreferrer noopener nofollow"><img src="/image/gVplX.png" alt="enter image description here"/></a> </p>

<p>我不太明白为什么会这样?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>为您的文本字段设置“前导、尾随、顶部和固定高度约束”,您的问题将得到解决!如果你不能同时设置前导和尾随,那么你应该设置固定宽度。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UITextField 不会自动调整宽度以适应内容,直到 resignFirstResponder 被调用?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/43284605/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/43284605/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UITextField 不会自动调整宽度以适应内容,直到 resignFirstResponder 被调用?