iOS 13 适配问题汇总

mac2026-10-05  0

iOS 13 适配问题汇总

1. UITextField 的私有属性 _placeholderLabel

[_textField setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];

其运行报错信息为 'Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug'

其原因是在 iOS 13 中一些私有对象属性被禁止访问了。 同样,UISearchBar 中使用到的 _searchField属性同样被禁止访问。

处理方法:

UITextField 可以使用 attributedPlaceholder 属性对placeholder进行个性化的样式设置

NSMutableAttributedString *attributedPlaceholder = [[NSMutableAttributedString alloc] initWithString:@"这是占位字符" attributes:@{NSForegroundColorAttributeName : [UIColor grayColor],NSFontAttributeName:[UIFont fontWithName:@"Arial" size: 16]}]; textField.attributedPlaceholder = attributedPlaceholder;

UISearchBar 则是提供了属性 _searchTextField 可以对其进行修改。

searchField = [_searchBar valueForKey:@"searchField"];

在 iOS 13 中通过 KVC 方式修改私有属性,是有 Crush 风险的, 所以,在使用前,先尝试能不能使用,即使在以前的系统版本中可以使用

最新回复(0)