You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改UITextField输入宽度以避免与‘Vergessen?’按钮重叠?

如何调整UITextField输入区域避免与右侧按钮重叠?

当然可以解决这个问题!你遇到的输入区域和右侧「Vergessen?」按钮重叠的情况,其实可以通过调整UITextField的文本区域范围,或者优化按钮的布局来轻松解决,结合你的代码给你两种实用方案:

方法一:自定义UITextField子类,精准控制文本区域

最稳妥的方式是自定义一个UITextField子类,重写文本区域的计算方法,让它根据右侧按钮的显示状态自动调整输入区域的宽度,确保文本不会跑到按钮下方。

class CustomPasswordTextField: UITextField {
    override func textRect(forBounds bounds: CGRect) -> CGRect {
        var textRect = super.textRect(forBounds: bounds)
        // 非编辑状态下rightView显示,给右侧留出按钮宽度+额外间距
        if let rightView = rightView, !rightView.isHidden {
            // 8是额外的留白间距,你可以根据需求调整
            textRect.size.width -= rightView.frame.width + 8
        }
        return textRect
    }
    
    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        // 编辑状态下rightView隐藏,直接使用默认的文本区域
        return super.editingRect(forBounds: bounds)
    }
}

之后把你的passwordTextField替换成这个自定义类的实例即可:

// 原创建passwordTextField的代码替换成
let passwordTextField = CustomPasswordTextField(frame: CGRect(x: ..., y: ..., width: 315, height: ...))

方法二:优化按钮布局,明确按钮尺寸和间距

如果你不想自定义子类,也可以直接在创建按钮时给它设置固定宽度和内边距,让UITextField能正确计算输入区域的范围:

func createForgetButton () { 
    let button = UIButton(type: .system) 
    button.setTitle("Vergessen?", for: .normal) 
    button.addTarget(self, action: #selector(self.vergessenTapped(_:)), for: .touchUpInside) 
    button.titleLabel?.font = UIFont(name: "Avenir Next", size: 19.0)
    
    // 禁用自动布局转换,手动设置按钮宽度
    button.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        // 根据按钮文本长度调整宽度,这里设为100作为示例
        button.widthAnchor.constraint(equalToConstant: 100)
    ])
    
    // 给按钮添加左右内边距,让文本和按钮边缘、输入区域都有留白
    button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8)
    
    passwordTextField.rightView = button 
    passwordTextField.rightViewMode = .unlessEditing 
}

这样按钮有了明确的宽度,UITextField会自动避开按钮的位置,输入文本就不会和按钮重叠了。

两种方法都能有效解决问题,自定义子类的方式更适合需要适配多种状态的场景,而调整按钮布局则更简单直接,你可以根据自己的需求选择~

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:27:30