iOS UITextField的placeholder的字体、颜色和偏移

释放双眼,带上耳机,听听看~!
1、设置UITextField的placeholder的字体和颜色

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 50, 200, 50)];
textField.borderStyle = UITextBorderStyleRoundedRect;
[self.view addSubview:textField];
// 方法一:KVC
textField.placeholder = @"this is placeholder";
[textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
[textField setValue:[UIFont boldSystemFontOfSize:18] forKeyPath:@"_placeholderLabel.font"];
// 方法二:属性字符串
field.attributedPlaceholder = [[NSAttributedString alloc]initWithString:@"this is placeholder" attributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName:[UIColor redColor]}];
2、方法一引发的联想:

获取 placeholderLabel,然后对其进行属性设置。

UILabel *placeholderLabel = [textField valueForKey:@"_placeholderLabel"];
placeholderLabel.text = @"手机电话";
placeholderLabel.textColor = [UIColor redColor];
placeholderLabel.textAlignment = NSTextAlignmentCenter;
placeholderLabel.font = [UIFont boldSystemFontOfSize:18];
placeholderLabel.backgroundColor = [UIColor cyanColor];

注意:可能部分属性设置不生效。

3、textField.fontplaceholderLabel.font 大小不同引发的偏移:
修改前的偏移
修改后的效果

解决偏移方法:

  • 创建一个类 CustomTextField 继承于 UITextField
  • CustomTextField.m 文件里重写下面两个函数即可
// 返回placeholderLabel的bounds,改变返回值,是调整placeholderLabel的位置
- (CGRect)placeholderRectForBounds:(CGRect)bounds {
return CGRectMake(0, 0 , self.bounds.size.width, self.bounds.size.height);
}
// 这个函数是调整placeholder在placeholderLabel中绘制的位置以及范围
// 参数 offSetY 是绘制placeholderLabel 时向下偏移的大小
- (void)drawPlaceholderInRect:(CGRect)rect {
[super drawPlaceholderInRect:CGRectMake(0, offSetY , self.bounds.size.width, self.bounds.size.height)];
}
4、使 UITextField 的文本(光标)的位置向右缩进

在我们使用原生 UITextField 的时候,placeholder 和输入的文字都是紧挨着 UITextField 的边缘的。

  • 创建一个类 CustomTextField 继承于 UITextField
  • 通过重写下面两个方法,给 UITextField 添加一个左边距
// 未输入时文本的位置,向右缩进10
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds, 10, 0);
}
// 输入后文本的位置,向右缩进10
- (CGRect)editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds, 10, 0);
}

人已赞赏
iOS文章

iOS 多线程:RunLoop

2019-12-31 10:10:55

iOS文章

查看iOS Crash logs的解决办法

2019-12-31 10:33:03

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索