Ini berpotensi mendapat beberapa faktor yang menyulitkan, beberapa disinggung dalam jawaban sebelumnya:
- Apa yang Anda coba selaraskan (hanya angka, hanya huruf, hanya huruf besar atau campuran)
- Placeholder
- Tombol yang jelas
Apa yang Anda coba selaraskan adalah penting karena titik mana dalam font harus dipusatkan secara vertikal karena ketinggian garis, ascenders, descenders dll. (Sumber: ilovetypography.com ) (Gambar terima kasih kepada http://ilovetypography.com/2009 / 01/14 / metrik-vertikal-mencolok / )
Misalnya, ketika Anda berurusan dengan angka saja, perataan tengah standar tidak akan terlihat benar. Bandingkan perbedaan pada dua di bawah ini, yang menggunakan perataan yang sama (dalam kode di bawah), yang salah satu terlihat benar dan yang lain terlihat sedikit salah:
Tidak tepat dengan campuran huruf:
tetapi terlihat benar jika itu hanya angka
Jadi, sayangnya, mungkin perlu sedikit coba-coba dan penyesuaian manual untuk membuatnya tampak benar secara visual.
Saya menempatkan kode di bawah ini dalam subclass dari UITextField. Itu memanggil metode superclass karena ini memperhitungkan tombol yang jelas hadir.
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
adalah nama dariUITextField
instansinya - milik Anda mungkin berbeda. Jadi dia akan memiliki sesuatu sepertiUITextField *textField = [[UITextField alloc] init];
. Jika Anda menggunakan nama variabel yang berbeda (selain daritextField
setelah*
), Anda harus melakukannyayourDifferentVariableNameHere.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter
.