我想为我的UITextFields使用一个自定义背景。这很好,除了我必须使用UITextBorderStyleNone来使它看起来很漂亮。这将迫使文本保持在左边,没有任何填充。

我可以手动设置填充,使它看起来类似于UITextBorderStyleRoundedRect除了使用我的自定义背景图像?


当前回答

我发现使用不可编辑的UITextView并设置contenttoffset要容易得多

uiTextView.contentOffset = CGPointMake(8, 7);

其他回答

Swift 3解决方案

class CustomTextField: UITextField {

 override func textRect(forBounds bounds: CGRect) -> CGRect {
  return CGRect(x: bounds.origin.x + 10, y: bounds.origin.y + 8, width: bounds.size.width - 20, height: bounds.size.height - 16)
 }

 override func editingRect(forBounds bounds: CGRect) -> CGRect {
  return self.textRect(forBounds: bounds)
 }
}

另一个需要考虑的问题是,如果你在添加填充的地方有多个UITextField,就要为每个文本字段创建一个单独的UIView——因为它们不能共享。

textField.layer.borderWidth = 3;

将添加边框,这对我来说是填充。

^这些建议对于那些通过编程方式创建界面的人来说非常有用。

但是对于我们这些使用Xcode界面构建器的人来说,有两个LAZY EASY方法:

更简单:把一个UIImageView放在一个文本字段后面 最简单的方法:将边框样式更改为简单的黑色正方形(左起第二个选项),然后将图像添加为背景图像。图像优先于正方形,因此您仍然可以获得正常图像背景所需的填充,而不需要实际绘制正方形。

编辑:你也可以使用黑色球体(在IB中选择UITextBox时,左起第三个选项),它不适合最右边的“图形球体”风格。

Swift 2.0版本:

let paddingView: UIView = UIView(frame: CGRectMake(0, 0, 5, 20))
textField.leftView = paddingView
textField.leftViewMode = UITextFieldViewMode.Always;