更改UITextField宽度dynamic取决于内容
我有同样的问题在这里: 键入时调整UITextField(通过使用Autolayout)
但它已经解决了与UITextView
而不是与UITextField
。
这段代码没有帮助:
func textFieldDidChange(sender: UITextField) { sender.invalidateIntrinsicContentSize() }
我有UITextField
(红色背景),并使用StackView的AutoLayout:
和约束:
但UITextField
只有在resignFirstResponder
时才会改变它的宽度。 你可以给我任何关于这个问题的build议吗? 我是Swift和iOS开发中的新成员。
要使用Autolayout来做到这一点,你将需要一个文本字段宽度的约束。 然后,当文本更改时,计算所需宽度并将约束上的constant
属性设置为该值。 最后,您需要在父视图上调用layoutIfNeeded()
。
UITextField
更改内容时(它不是UITextFieldDelegate
一部分),它不调用你的方法textFieldDidChange(_:)
。 你应该使用textField(_:shouldChangeCharactersInRange:replacementString:)
来代替。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { textField.invalidateIntrinsicContentSize() return true }
这适用于UITextField。 在我的情况下,我希望字体是相同的大小。 我将textField宽度约束设置为> = 10,它在iOS 9,10,11上正常工作。
对于iOS 11,这甚至可以在编辑文本时使用。
为了在iOS 9和10上编辑文本的同时进行这个工作,我通过注册一个textDidChange事件来处理另一个方法。
//Swift 3 Sample //In viewDidLoad adjustableTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) @objc func textFieldDidChange(_ textField: UITextField) { adjustableTextField.resignFirstResponder() adjustableTextField.becomeFirstResponder() }