2011-07-02 14 views
22

के साथ लेबल के अंदर पाठ को लंबवत रूप से संरेखित करना संभव है मेरे आवेदन में मेरे पास कस्टम कक्षों के साथ कई तालिकादृश्य हैं। कोशिकाओं में से कुछ पाठ 2-4 लाइनों के बीच फैले हुए हैं ताकि लेबल की ऊंचाई सामग्री को शामिल करने के लिए काफी बड़ी हो।क्या "बड़े" फ्रेम

हालांकि आईपैड पर स्क्रीन बड़ी है और मैं लेबल को लेबल के ऊपरी बाएं बिंदु पर दिखाना चाहता हूं, मध्य में नहीं, जब आप numberOfLines संपत्ति का उपयोग करते हैं। मुझे पता है कि आप पाठ को क्षैतिज रूप से संरेखित कर सकते हैं, लेकिन टेक्स्ट को ऊपरी बाईं ओर भी संरेखित करना संभव होना चाहिए? या यह असंभव है।

स्क्रीनशॉट:

enter image description here

+0

चेक यह पेज [खड़ी एक UILabel भीतर पाठ संरेखित] [1] http://stackoverflow.com/questions/1054558/vertically-align-text-within-a-uilabel?rq=1 – Adison

उत्तर

20

इसके असंभवUILabel खड़ी में पाठ संरेखित करने के लिए। लेकिन, आप गतिशील रूप से लेबल sizeWithFont का उपयोग कर की ऊंचाई बदल सकते हैं: NSStringकी विधि, और सिर्फ सेट अपने एक्स और y आप चाहते हैं।

एक विकल्प के रूप में आप UITextField का उपयोग कर सकते हैं। यह सामग्री का समर्थन करता है वर्टिकल एलाइनमेंट peoperty क्योंकि यह UIControl का उप-वर्ग है। उपयोगकर्ता को 0 टाइप करने से रोकने के लिए आपको उपयोगकर्ता इंटेक्शनएनेबल से NO सेट करना होगा।

+0

धन्यवाद, क्या uitextfield खराब प्रदर्शन या tableviewcell में अन्य चीजों के लिए नेतृत्व करेंगे या यह उतना ही अच्छा है? – LuckyLuke

+0

@ एंड्रियास, हां। तालिका दृश्य कक्षों के अंदर UITextField का उपयोग करना ठीक है। मेरी व्यक्तिगत राय में, UILabels का उपयोग करके और गतिशील रूप से आकार देने का यह सही तरीका होगा। वैसे भी, यह आपके लिए चुनने के लिए। दोनों तरह से ठीक हैं। ;-) – EmptyStack

+0

UITextField के साथ आपको टेक्स्ट नंबर के चारों ओर उस बदसूरत फ्रेम मिल गया है? –

3

मैं वास्तव में देखा है कि

[Blue setSizeToFit] 

का उपयोग कर शीर्ष पर लंबवत संरेखित करता है। डिफ़ॉल्ट केंद्रित है।

+1

जिस तरह से यह वास्तव में काम करता है वह यह है कि यह अभी भी केंद्रित है लेकिन अब शीर्ष वही रहता है और बॉक्स सिर्फ "दाएं" है, ऐसा लगता है कि यह गठबंधन शीर्ष है। यह ज्यादातर लोगों के उद्देश्य परोसता है। हालांकि, आप पृष्ठभूमि को एक निश्चित रंग में सेट कर सकते हैं और चीजों को अपना अंत सत्यापित कर सकते हैं। –

+0

अच्छी बात आदमी !!!! tableviwecell में मेरे लिए यह काम कर रहा है। –

+0

सुनिश्चित करें कि आपकी बाधाएं सही हैं, ताकि लेबल को –

3

sizeToFitUITableCellView में काम नहीं करता है, क्योंकि सेल को स्क्रॉलिंग के दौरान पुन: उपयोग किया जाता है।

समाधान फ़ॉन्ट और फ़ॉन्ट आकार के अनुसार तालिका सेल ऊंचाई की गणना करना और लेबल ऊंचाई को समायोजित करना है।

के रूप में यह काफी मुश्किल था वेब पर समाधान खोजने के लिए मैं इसके बारे में एक short post लिखा

1

यहाँ एक ही सवाल किसी ने पूछा है। आपको इस समस्या को हल करने के लिए और अधिक उचित तरीका मिलेगा। उन्होंने लोगों ने इस पर बहुत अच्छा स्पष्टीकरण दिया।

मुझे ऐसा लगता है, आपको इसे देखना चाहिए।

उस धागे में कई उत्तरों सुझाव बताते हैं कि text के आधार पर UILabel के लिए गतिशील फ्रेम को वर्णित कोड के नीचे स्निपेट के रूप में सेट करें।

CGSize theStringSize = [textToBeUsed sizeWithFont:lblTitle.font constrainedToSize:labelSize lineBreakMode:lblTitle.lineBreakMode]; 
    lblTitle.frame = CGRectMake(lblTitle.frame.origin.x, lblTitle.frame.origin.y, theStringSize.width, theStringSize.height); 
    lblTitle.text = theText; 

    // lblTitle is the Label used for showing the Text. 

आप अधिक सटीक विचार प्राप्त कर सकते बजाय textFieldhere it is

2

का उपयोग कर रहा viewDidLoad

self.textLabel.numberOfLines = 0; 
[self.textLabel sizeToFit]; 

में जोड़ा सुनिश्चित करें कि आपके बाधाओं, सही सेट कर रहे हैं ताकि लेबल हटना करने की अनुमति दी है अथवा बढ़ता है। अन्यथा यह काम नहीं करेगा।

3

आप यह कर सकते के रूप में इस प्रकार है

  1. सेट आईबी

  2. से अपने लेबल के numberOfLines संपत्ति 0 सेट अपने लेबल के lineBreakMode रूप UILineBreakModeWordWrap (बहुत बहुत महत्वपूर्ण)

अब जो भी आप लेबल पर सेट करते हैं, उसे बस कुछ @ "\ n" संलग्न करें ..... ex.-

[yourTextLabel setText:@"myLabel\n\n\n\n\n"]; 
+0

को कम करने या बढ़ने की अनुमति दी जा सके यदि आप ऐसा करते हैं, तो टेक्स्ट में हमेशा इलिप्सिस होगा, है ना? – Daniel

3

iOS 7 sizeWithFont: में अब पदावनत कर रहा है! UILabel subclassing जैसे कई समाधान अनुकूलित किए जाने हैं।

शीर्ष गठबंधन लेबल पाठ के लिए मेरे समाधान: एक उपवर्ग में TopVerticalAlignmentLabel : UILabel ओवरराइड drawRect: इस प्रकार है:

- (void)drawRect:(CGRect)rect 
{ 
    CGRect labelStringRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX) 
                options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) 
                attributes:@{ NSFontAttributeName: self.font, /* further attributes */} 
                context:nil]; 

    [super drawTextInRect:CGRectMake(0, 0, self.frame.size.width, labelStringRect.size.height)]; 
} 
0

आप बस एक UITextView का उपयोग कर सकते हैं, और इसके UserInteraction नहीं करने के लिए सक्षम सेट करें, और अपनी समस्याओं के सभी होगा हल हो गया!

संबंधित मुद्दे