它不起作用只是因为您声明的文本的字体大小UITextField
和CGRectInset
您正在申请的。实际上它应该根据您设置的字体大小。例如,对于 14.0 的字体大小,只需更改您的方法如下:
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 6);
}
-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 6);
}
原因是文本的绘制矩形。例如,当我们将字体大小设置UITextField
为 14.0 时,则它需要至少 18.0 的高度来调整框架中的文本。所以它需要在文本周围额外增加 4 个像素,你可以说它是覆盖框架。因此,在您的情况下,此条件并不令人满意,因为据我猜测您已将字体大小调整为 14.0,默认情况下帧高度UITextField
为 30.0,边缘遮罩为每边 7.0,这意味着总共 14.0。因此,您的文本矩形返回 16.0,这反过来又阻止操作系统更新文本框架,因为它位于图形上下文之外。我希望你清楚。如果它解决了您的问题,请接受我的回答。更好的答案如下:
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, (30 - self.font.pointSize - 4)/2);
}
-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, (30 - self.font.pointSize - 4)/2);
}
享受!