Điều này có khả năng có một số yếu tố phức tạp, một số được ám chỉ trong các câu trả lời trước:
- Những gì bạn đang cố gắng căn chỉnh (chỉ số, chỉ chữ cái, chỉ chữ cái viết hoa hoặc hỗn hợp)
- Giữ chỗ
- Nút xóa
Những gì bạn đang cố gắng căn chỉnh là rất quan trọng vì điểm nào trong phông chữ phải được căn giữa theo chiều dọc do chiều cao dòng, độ cao, hậu duệ, v.v. (nguồn: ilovetypography.com ) (Hình ảnh nhờ http://ilovetypography.com/2009 / 01/14 / số liệu không rõ ràng theo chiều dọc / )
Khi bạn đang xử lý chỉ các số chẳng hạn, căn chỉnh trung tâm tiêu chuẩn sẽ không hoàn toàn đúng. So sánh sự khác biệt trong hai bên dưới, sử dụng cùng một căn chỉnh (trong mã bên dưới), một trong số đó có vẻ chính xác và cái còn lại trông hơi khác:
Không hoàn toàn đúng với một hỗn hợp các chữ cái:
nhưng có vẻ đúng nếu nó chỉ là số
Vì vậy, thật không may, nó có thể cần một chút thử nghiệm và lỗi và điều chỉnh thủ công để làm cho nó trông chính xác.
Tôi đã đặt đoạn mã dưới đây trong một lớp con của UITextField. Nó gọi các phương thức siêu lớp vì điều này sẽ tính đến nút xóa.
override func awakeFromNib() {
contentVerticalAlignment = UIControlContentVerticalAlignment.Center
}
override func textRectForBounds(bounds: CGRect) -> CGRect {
let boundsWithClear = super.textRectForBounds(bounds)
let delta = CGFloat(1)
return CGRect(x: boundsWithClear.minX, y: delta, width: boundsWithClear.width, height: boundsWithClear.height - delta/2)
}
override func editingRectForBounds(bounds: CGRect) -> CGRect {
let boundsWithClear = super.editingRectForBounds(bounds)
let delta = CGFloat(1)
return CGRect(x: boundsWithClear.minX, y: delta, width: boundsWithClear.width, height: boundsWithClear.height - delta/2)
}
override func placeholderRectForBounds(bounds: CGRect) -> CGRect {
let delta = CGFloat(1)
return CGRect(x: bounds.minX, y: delta, width: bounds.width, height: bounds.height - delta/2)
}
textField
là tênUITextField
ví dụ của anh ta - tên của bạn có thể khác. Vì vậy, anh ta sẽ có một cái gì đó nhưUITextField *textField = [[UITextField alloc] init];
. Nếu bạn sử dụng một tên biến khác (bất cứ điều gì kháctextField
sau sau*
), bạn cần phải làmyourDifferentVariableNameHere.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter
thay thế.