Bunun potansiyel olarak birkaç karmaşık faktörü vardır, bazıları önceki cevaplarda belirtilmiştir:
- Hizalamaya çalıştığınız şey (yalnızca sayılar, sadece harfler, sadece büyük harfler veya bir karışım)
- Yer tutucular
- Temizle düğmesi
Ne yazı ki nokta arasında dikey nedeniyle satır yüksekliği ascenders, desandörlerin vb merkezli olmalıdır çünkü fazla uyum sağlamaya çalışıyoruz önemlidir : (kaynak ilovetypography.com ) için (Görüntü sayesinde http://ilovetypography.com/2009 / 01/14 / göze çarpmayan-dikey-metrikler / )
Örneğin yalnızca sayılarla uğraşırken, standart merkez hizalama pek doğru görünmeyecektir. Aşağıdaki ikisi aynı hizalamayı kullanan (aşağıdaki kodda), biri doğru görünen diğeri hafifçe kapalı olan farkı karşılaştırın:
Harflerin bir karışımı ile doğru değil:
ama sadece rakamlarsa doğru görünüyor
Bu nedenle, maalesef, görsel olarak doğru görünmesini sağlamak için biraz deneme yanılma ve manuel ayar yapılması gerekebilir.
Aşağıdaki kodu bir UITextField alt sınıfına yerleştirdim. Bu, mevcut temizle düğmesini dikkate aldığından üst sınıf yöntemlerini çağırır.
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
adı olduğunu unutmayınUITextField
- sizinki farklı olabilir. Yani onun gibi bir şey olacakUITextField *textField = [[UITextField alloc] init];
. Farklı bir değişken adı (textField
sonrasındakinden farklı bir şey*
) kullanırsanız,yourDifferentVariableNameHere.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter
bunun yerine yapmanız gerekir .