iOS15下自定义UIButton类构造函数设置的属性被忽略问题求助
你遇到的问题确实是iOS 15新增的UIButton样式机制导致的。
问题原因
iOS 15为UIButton引入了UIButton.Configuration 配置式样式管理体系,默认情况下所有新建UIButton实例会开启AutomaticallyUpdatesConfiguration开关,系统会在构造函数执行完成后自动应用默认的配置值,直接覆盖你通过传统SetTitle(_:for:)、直接修改属性等旧API写入的配置,就会出现构造函数执行成功但配置不生效的现象。
UILabel没有引入同类配置式管理机制,所以原有自定义逻辑不受iOS 15影响。
解决方案
方案1:沿用旧API逻辑(快速适配)
只需在构造函数开头关闭自动更新配置的开关,原有代码无需修改即可正常运行:
public class AppButton : UIButton { public AppButton(IntPtr handle) : base(handle) { // iOS15适配代码 if (UIDevice.CurrentDevice.CheckSystemVersion(15, 0)) { AutomaticallyUpdatesConfiguration = false; } SetTitle("Hello", UIControlState.Normal); Alpha = .2f; } }
方案2:使用新Configuration API(推荐长期适配)
直接适配iOS 15新增的配置API,符合系统后续的设计规范:
public class AppButton : UIButton { public AppButton(IntPtr handle) : base(handle) { if (UIDevice.CurrentDevice.CheckSystemVersion(15, 0)) { var buttonConfig = UIButtonConfiguration.PlainButtonConfiguration; buttonConfig.Title = "Hello"; Configuration = buttonConfig; } else { SetTitle("Hello", UIControlState.Normal); } Alpha = .2f; } }
内容的提问来源于stack exchange,提问作者Jonathan F.
相关产品推荐
相关产品推荐

