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 风险的,
所以,在使用前,先尝试能不能使用,即使在以前的系统版本中可以使用