इससे संभावित रूप से कई जटिल कारक हो गए हैं, जिनमें से कुछ पिछले उत्तर में हल किए गए हैं:
- आप क्या संरेखित करने की कोशिश कर रहे हैं (केवल संख्याएँ, सिर्फ अक्षर, बस अपरकेस अक्षर या एक मिश्रण)
- प्लेसहोल्डर
- स्पष्ट बटन
क्या आप संरेखित करने के लिए कोशिश कर रहे हैं महत्वपूर्ण है क्योंकि फ़ॉन्ट में जो बिंदु के खड़ी रेखा ऊंचाई, आरोहक, descenders आदि के कारण केंद्रित होना चाहिए (स्रोत: ilovetypography.com ) (छवि धन्यवाद करने के लिए http://ilovetypography.com/2009 / 01/14 / असंगत-ऊर्ध्वाधर-मैट्रिक्स / )

जब आप उदाहरण के लिए सिर्फ संख्याओं के साथ काम कर रहे होते हैं, तो मानक केंद्र संरेखण बिल्कुल सही नहीं लगेगा। दो नीचे के अंतर की तुलना करें, जो समान संरेखण (नीचे दिए गए कोड में) का उपयोग करते हैं, जिनमें से एक सही दिखता है और दूसरा जो थोड़ा बंद दिखता है:
अक्षरों के मिश्रण के साथ बिल्कुल सही नहीं:

लेकिन सही लगता है अगर यह सिर्फ संख्या है

इसलिए, दुर्भाग्य से, इसे दृष्टिगत रूप से सही होने के लिए परीक्षण और त्रुटि और मैनुअल समायोजन की थोड़ी आवश्यकता हो सकती है।
मैंने नीचे दिए गए कोड को UITextField के एक उपवर्ग में रखा। यह सुपरक्लास विधियों को कहता है क्योंकि इसमें मौजूद स्पष्ट बटन को ध्यान में रखा जाता है।
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उसकेUITextFieldउदाहरण का नाम है - आपका अलग हो सकता है। तो उसके पास कुछ ऐसा होगाUITextField *textField = [[UITextField alloc] init];। यदि आप एक भिन्न चर नाम का उपयोग करते हैं (इसकेtextFieldबाद के अलावा कुछ भी*), तो आपकोyourDifferentVariableNameHere.contentVerticalAlignment = UIControlContentVerticalAlignmentCenterइसके बजाय करने की आवश्यकता है ।