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