什么是 UITextField 中的 borderRect、editingRect、placeholderRect、textRect?
What are borderRect, editingRect, placeholderRect, textRect in UITextField?
从之前发的answer了解到editingRect
是编辑文本时显示的矩形,textRect
是不编辑文本时显示的矩形编辑。但我不知道 placeholderRect
和 borderRect
在 UITextField 控件中的确切显示位置。我假设 borderRect
与 UITextField 的 frame rect 相同,因为其中包含单词 'border',但在这样做之后:
override func borderRect(forBounds bounds: CGRect) -> CGRect {
let rect = bounds
rect.size.height = 150 //the height of my UITextField currently is 100
return rect
}
我意识到不是。那么什么是 placeholderRect
和 borderRect
,它们在 UITextField 中的什么位置?
来自 Apple 文档:
placeholderRect(forBounds:) (Documentation)
Returns the drawing rectangle for the text field’s placeholder text
borderRect(forBounds:) (Documentation)
Returns the text field’s border rectangle.
borderRect
指的是边框的框架(如果borderStyle != .none
则文本字段将存在),placeholderRect
指的是占位符文本的框架 - 文本当 text
为空时出现。
这里有一个小示例,您可以将其粘贴到 playground 中,其中显示了所有矩形的位置。我为每个文本字段 rects 返回了 bounds
rect 的不同区域。
class TextFieldWithDifferentRects: UITextField {
override func textRect(forBounds bounds: CGRect) -> CGRect {
// top left
CGRect(x: bounds.minX, y: bounds.minY, width: bounds.width / 2, height: bounds.height / 2)
}
override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
// top right
CGRect(x: bounds.midX, y: bounds.minY, width: bounds.width / 2, height: bounds.height / 2)
}
override func borderRect(forBounds bounds: CGRect) -> CGRect {
// bottom left
CGRect(x: bounds.minX, y: bounds.midY, width: bounds.width / 2, height: bounds.height / 2)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
// bottom right
CGRect(x: bounds.midX, y: bounds.midY, width: bounds.width / 2, height: bounds.height / 2)
}
}
let view = TextFieldWithDifferentRects(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view.backgroundColor = .white // make the placeholder text more visible
view.borderStyle = .line
view.placeholder = "a" // use the playground quick view button here
view.text = "b" // and here
// by selecting everything, we kick the text field into edit mode, to show the editingRect
view.selectAll(nil) // and lastly here
输出:
从之前发的answer了解到editingRect
是编辑文本时显示的矩形,textRect
是不编辑文本时显示的矩形编辑。但我不知道 placeholderRect
和 borderRect
在 UITextField 控件中的确切显示位置。我假设 borderRect
与 UITextField 的 frame rect 相同,因为其中包含单词 'border',但在这样做之后:
override func borderRect(forBounds bounds: CGRect) -> CGRect {
let rect = bounds
rect.size.height = 150 //the height of my UITextField currently is 100
return rect
}
我意识到不是。那么什么是 placeholderRect
和 borderRect
,它们在 UITextField 中的什么位置?
来自 Apple 文档:
placeholderRect(forBounds:) (Documentation)
Returns the drawing rectangle for the text field’s placeholder text
borderRect(forBounds:) (Documentation)
Returns the text field’s border rectangle.
borderRect
指的是边框的框架(如果borderStyle != .none
则文本字段将存在),placeholderRect
指的是占位符文本的框架 - 文本当 text
为空时出现。
这里有一个小示例,您可以将其粘贴到 playground 中,其中显示了所有矩形的位置。我为每个文本字段 rects 返回了 bounds
rect 的不同区域。
class TextFieldWithDifferentRects: UITextField {
override func textRect(forBounds bounds: CGRect) -> CGRect {
// top left
CGRect(x: bounds.minX, y: bounds.minY, width: bounds.width / 2, height: bounds.height / 2)
}
override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
// top right
CGRect(x: bounds.midX, y: bounds.minY, width: bounds.width / 2, height: bounds.height / 2)
}
override func borderRect(forBounds bounds: CGRect) -> CGRect {
// bottom left
CGRect(x: bounds.minX, y: bounds.midY, width: bounds.width / 2, height: bounds.height / 2)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
// bottom right
CGRect(x: bounds.midX, y: bounds.midY, width: bounds.width / 2, height: bounds.height / 2)
}
}
let view = TextFieldWithDifferentRects(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view.backgroundColor = .white // make the placeholder text more visible
view.borderStyle = .line
view.placeholder = "a" // use the playground quick view button here
view.text = "b" // and here
// by selecting everything, we kick the text field into edit mode, to show the editingRect
view.selectAll(nil) // and lastly here
输出: