2013-06-17 12 views
12

का उपयोग करके UILabel टेक्स्ट स्वचालित रूप से आकार में नहीं बदला गया है, मैं UITableViewCell सबक्लास को लागू करने की कोशिश कर रहा हूं और UILabel को छोड़कर सब कुछ पूरी तरह से काम कर रहा है। मैंने जो बाधाएं स्थापित की हैं, उन्हें निश्चित रूप से लागू किया जा रहा है, लेकिन बाधाओं के संघर्ष के दौरान लेबल के अंदर का पाठ छोटे फ़ॉन्ट आकार में आकार बदलता नहीं है। इसके बजाए, यूलाबेल की ऊंचाई कम हो जाती है और फ़ॉन्ट एक ही आकार में रहता है, जिसका अर्थ है कि अक्षरों को ऊपर और नीचे काट दिया जाता है।ऑटो लेआउट

क्या यह काम करने के लिए मुझे कुछ तरीका कहना है? मुझे लगता है कि ऑटो लेआउट फ़ॉन्ट आकार को स्वचालित रूप से आकार देने के लिए पर्याप्त स्मार्ट होगा, इसलिए मैं ऐसा क्यों कर रहा हूं कि यह क्यों हो रहा है।

प्रासंगिक कोड:

self.label = [[UILabel alloc] initWithFrame:CGRectZero]; 
self.label.textColor = [UIColor whiteColor]; 
self.label.translatesAutoresizingMaskIntoConstraints = NO; 
self.label.textAlignment = NSTextAlignmentCenter; 
self.label.numberOfLines = 1; 
[self.contentView addSubview:self.label]; 

NSLayoutConstraint *otherViewToLabelHorizontalConstraint = // Make sure that the label is always to the right of the other view. 
        [NSLayoutConstraint constraintWithItem:self.label 
               attribute:NSLayoutAttributeLeft 
               relatedBy:NSLayoutRelationGreaterThanOrEqual 
                toItem:self.otherView 
               attribute:NSLayoutAttributeRight 
               multiplier:1.0 
                constant:0.0]; 

NSLayoutConstraint *aTextFieldToLabelVerticalConstraint = 
        [NSLayoutConstraint constraintWithItem:self.label 
               attribute:NSLayoutAttributeTop 
               relatedBy:NSLayoutRelationGreaterThanOrEqual 
                toItem:self.aTextField 
               attribute:NSLayoutAttributeBottom 
               multiplier:1.0 
                constant:0.0]; 

असल में, इन बाधाओं एक सेल जहां otherView बाईं तरफ है लागू करने के लिए होती हैं, aTextField ही y-स्तर पर otherView के अधिकार, और लेबल पर है aTextField से नीचे और otherView के नीचे दाईं ओर है।

सामान्य रूप से, इसके साथ किसी भी मदद के लिए धन्यवाद।

+0

क्या आप इन बाधाओं को जोड़ते समय अपने कंसोल में अपवाद या कुछ अन्य लॉग संदेश प्राप्त कर रहे हैं? – larsacus

+0

नहीं, मैं उन हिस्सों से छुटकारा पाने के लिए समाप्त हुआ जो इस बाधा का उपयोग करते थे। –

उत्तर

7

आप

myLabel.adjustsFontSizeToFitWidth = YES; 
myLabel.minimumScaleFactor = .5f; 

तब लेबल फ़ॉन्ट आकार ऑटो समायोजित किया जाएगा की जरूरत है।

+2

प्रतिक्रिया के लिए धन्यवाद, लेकिन इस कोड को लागू करने के बाद, यह अभी भी ऊपर और नीचे कट ऑफ है। मेरे पास फ़ॉन्ट का आकार 18.0 एफ है। मैंने फ़ॉन्ट का परीक्षण किया है और इसे फिट करने की न्यूनतम न्यूनतम 13.0f है, इसलिए मुझे समझ में नहीं आता है कि यह 0.5f गुणक तक पहुंचने तक स्वचालित रूप से इसे क्यों स्केल नहीं करेगा। –

2

adjustsFontSizeToFitWidth और minimumScaleFactor की सेटिंग के साथ, आपको कम प्राथमिकता रखने के लिए लेबल की सामग्री संपीड़न भी सेट करने की आवश्यकता है। इस objc.io essay के "संपीड़न प्रतिरोध और सामग्री हॉगिंग" अनुभाग देखें। असल में, यदि आपके लेबल अनुगामी बाधा की तुलना में कम संपीड़न प्रतिरोध प्राथमिकता है, लेबल आकार दिया जाना चाहिए:

[myLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultLow 
           forAxis:UILayoutConstraintAxisHorizontal]; 
+0

यदि लेबल छोटा हो रहा है तो आप संपीड़न प्रतिरोध उच्च, कम नहीं चाहते हैं। क्या तुम नहीं हो – smileBot

2

मैं देखने के लिए एक आवश्यक चौड़ाई बाधा की स्थापना मैं लेबल को जोड़ने था इस समस्या का समाधान।

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0f constant:width]; 

और सुनिश्चित करें कि इस बाधा के लिए प्राथमिकता UILayoutPriorityRequired पर सेट है। जब पाठ फ़ील्ड को superview के लेबल को पिन करने नहीं बल्कि

[constraint setPriority:UILayoutPriorityRequired]; 

पाठ का आकार बदलने गया था, इसलिए मैं निष्कर्ष निकाला लेबल की अंतिम चौड़ाई के लिए लेआउट गणना में शामिल तत्वों के आंतरिक आकार के साथ एक समस्या होना चाहिए।

+1

'स्थिर' में 'आकार' क्या है: आकार'? – jowie

+0

यह वास्तविक दृश्य की चौड़ाई है जिसे आप बाध्य करना चाहते हैं। मैंने इसे चौड़ाई में बदल दिया, जैसा कि होना चाहिए। त्रुटि को ध्यान में रखने के लिए धन्यवाद – ale0xB

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