मैं UITextField Text को लंबवत केंद्र कैसे करूँ?


143

मैं बस एक UITextFieldऔर तुरंत देख रहा हूँ कि पाठ लंबवत केंद्र में नहीं है। इसके बजाय, यह मेरे बटन के शीर्ष के साथ फ्लश है, जो मुझे अजीब लगता है क्योंकि मैं डिफ़ॉल्ट रूप से इसे लंबवत रूप से केंद्रित करने की उम्मीद करूंगा। मैं इसे लंबवत रूप से कैसे केंद्र कर सकता हूं, या क्या कोई डिफ़ॉल्ट सेटिंग है जो मुझे याद आ रही है?

जवाबों:


369
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

तेजी से उपयोग में:

textField.contentVerticalAlignment = UIControlContentVerticalAlignment.center

1
@ user353877: यह अभी भी ठीक काम करता है। ध्यान दें कि रोजर की प्रतिक्रिया में, textFieldउसके UITextFieldउदाहरण का नाम है - आपका अलग हो सकता है। तो उसके पास कुछ ऐसा होगा UITextField *textField = [[UITextField alloc] init];। यदि आप एक भिन्न चर नाम का उपयोग करते हैं (इसके textFieldबाद के अलावा कुछ भी *), तो आपको yourDifferentVariableNameHere.contentVerticalAlignment = UIControlContentVerticalAlignmentCenterइसके बजाय करने की आवश्यकता है ।
जनरलमीक

@ user353877 "केंद्र" से ठीक पहले एक बिंदु जोड़ें: UIControlContentVerticalAlignment.Center;
जोश

1
वहाँ UITextView के लिए एक ही विधि है?
कैफीनशॉट्स

क्या इस संपत्ति के लिए एक स्विफ्ट बराबर है?
डेमोक्रेफेनिस्ट

2
स्विफ्ट 3.0 में, यह एक एनुम का उपयोग करने का अनुशंसित तरीका है:textField.contentVerticalAlignment = .center
ग्लेन

9

इससे संभावित रूप से कई जटिल कारक हो गए हैं, जिनमें से कुछ पिछले उत्तर में हल किए गए हैं:

  • आप क्या संरेखित करने की कोशिश कर रहे हैं (केवल संख्याएँ, सिर्फ अक्षर, बस अपरकेस अक्षर या एक मिश्रण)
  • प्लेसहोल्डर
  • स्पष्ट बटन

क्या आप संरेखित करने के लिए कोशिश कर रहे हैं महत्वपूर्ण है क्योंकि फ़ॉन्ट में जो बिंदु के खड़ी रेखा ऊंचाई, आरोहक, 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)
}

मुझे लगता placeholderRectForBoundsहै कि सही करने के लिए बहुत अधिक है। मेरे पास एक अधिकार है और यह अन्य सीमा के विपरीत इसमें जाता है। मैं तो बस लागू किया textRectForBoundsऔर यह कहा जाता है अन्य 2 funcs से :)
Sasho

5

स्टोरीबोर्ड में: नियंत्रण में -> अपनी आवश्यकताओं के अनुसार ऊर्ध्वाधर और साथ ही क्षैतिज संरेखण को बदलें।

यहाँ छवि विवरण दर्ज करें


1

यह TextField के पाठ के लिए ठीक काम करता है। लेकिन अगर आप प्लेसहोल्डर टेक्स्ट (एक टेक्स्ट जो टेक्स्टफील्ड के खाली होने पर दिखाई देगा) का उपयोग करना चाहते हैं, तो iOS 7 पर आपको समस्याएँ आएंगी।

मैंने TextField क्लास को ओवरराइड करके इसे हल किया और

- (void) drawPlaceholderInRect:(CGRect)rect

तरीका।

ऐशे ही:

- (void) drawPlaceholderInRect:(CGRect)rect
{
    [[UIColor blueColor] setFill];
    CGRect placeholderRect = CGRectMake(rect.origin.x, (rect.size.height- self.font.pointSize)/2, rect.size.width, self.font.pointSize);
    [[self placeholder] drawInRect:placeholderRect withFont:self.font lineBreakMode:NSLineBreakByWordWrapping alignment:self.textAlignment];
}

दोनों iOS7 और पुराने संस्करणों के लिए काम करता है।


आप स्विफ्ट में कैसे संभालते हैं? क्योंकि Swift में self.placeholder.drawInRect मौजूद नहीं है।
राजा-जादूगर

यह काम करता है, लेकिन self.font.pointSize पॉइंटसाइज की तुलना में थोड़ा बेहतर काम करता है
ED-209
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.