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

自定义UITextField创建时修改大小写设置无效,求排查原因

问题原因及修复方案

问题根源

你在CustomTextField的layoutSubviews方法里强制将autocapitalizationType设为.none,而layoutSubviews是系统会频繁调用的方法——比如视图被添加到父视图、屏幕旋转、视图尺寸变化时,都会触发这个方法。这就导致你在ViewController中给TextField设置的.allCharacters,会被后续调用的layoutSubviews覆盖,最终无法生效。

修复步骤

要实现“默认小写,创建时可修改为大写”的需求,应该把默认配置放在初始化方法里,而不是layoutSubviews(这个方法只应该处理布局相关逻辑):

  1. 移除layoutSubviews中修改autocapitalizationType的代码
  2. 在CustomTextField的初始化方法中统一设置默认值

修改后的CustomTextField代码:

class CustomTextField: UITextField {
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupDefaultConfig()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupDefaultConfig()
    }
    
    private func setupDefaultConfig() {
        // 默认设置为无自动大写,即输入小写
        autocapitalizationType = .none
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        // 这里只保留布局相关的代码,不要修改自动大写属性
    }
}

这样修改后:

  • 未额外设置的TextField2会保持默认的.none,输入小写字母
  • 在ViewController中设置了.allCharacters的TextField,配置不会被覆盖,能正常生效为全大写输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:12:28