एक UILabel का मिनिममसेलेक्टर कैसे काम करता है?


109

मैंने minimumFontSizeपहले भी इस्तेमाल किया है, लेकिन यह फ़ंक्शन अब पदावनत हो गया है और मुझे समझ में नहीं आता कि कैसे minimumScaleFactorकाम करता है।

मैं चाहता हूं कि अधिकतम फ़ॉन्ट का आकार 10 और न्यूनतम 7 हो।

मैं स्केल फैक्टर 7 के साथ फॉन्ट साइज़ 7 तक री-साइज़ कैसे प्राप्त कर सकता हूँ?

UILabel सृष्टि:

UILabel *label = [[UILabel alloc] init];
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
label.text =  [labelName uppercaseString];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:HELVETICA_FONT_STYLE_BOLD size:9.5];
label.backgroundColor = [UIColor clearColor];
label.minimumScaleFactor = .1f;

[label addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[label(WIDTH)]"
                                                              options:0
                                                              metrics:@{@"WIDTH" : [NSNumber numberWithFloat:buttonSize.width]}
                                                                views:NSDictionaryOfVariableBindings(label)]];

[contentView addSubview:label];

जवाबों:


204

आपको सेट करने की आवश्यकता है label.adjustsFontSizeToFitWidth = YES;


1
बिल्कुल सही, यह वही है जो मुझे अपने कोड में याद आ रहा था।
साभार

14
नोट: "Apple का दस्तावेज कहता है कि मिनिममसेलेक्टर केवल तभी काम करता है जब नंबरऑफलाइन 1 पर सेट हो। 0 का उपयोग करना या 1 से अधिक कुछ भी काम नहीं करेगा।" । धन्यवाद सीन।
samthui7

बहुत बढ़िया! मज़ेदार यह है कि यदि आप XIB में minumumScaleFactor सेट करते हैं, तो आपको AdjustsFontSizeToFitWidth को सेट करने की आवश्यकता नहीं है, लेकिन कोड में करते समय आपको आवश्यकता होती है।
पोलित्सा

104

इसके अतिरिक्त अन्य उत्तर क्या कहते हैं, यदि आप minSize / defaultSize (Division) को इसके अनुसार रखते हैं minimumScaleFactor, तो यह पुराने का उपयोग करने के समान होगा minimumFontSize

पूर्व, यदि आप डिफ़ॉल्ट लेबल आकार का उपयोग करके न्यूनतम फ़ॉन्ट आकार 10 होना चाहते हैं, तो आप कर सकते हैं:

[label setMinimumScaleFactor:10.0/[UIFont labelFontSize]];

( [UIFont labelFontSize]यदि यह डिफ़ॉल्ट नहीं है तो अपने लेबल के फ़ॉन्ट आकार से बदलें )।

जो निम्नानुसार होगा: [label setMinimumFontSize:10.0];


विभाजन को CGFloat के रूप में
डाला

@dwery 10 / लेबल करना, स्पष्ट रूप से कास्टिंग के बिना, 0 या 10.0 या 10.f के ठीक काम के पूर्णांक पूर्णांक मान के साथ समाप्त हो सकता है।
कल्ले

तुम सही हो, यह काम करना चाहिए। मुझे याद नहीं है कि यह मेरे लिए किस कोड में काम नहीं करता, शायद यह f या डॉट को याद कर रहा था।
15'15

20

प्रलेखन के अनुसार :

वर्तमान फ़ॉन्ट आकार के लिए सबसे छोटे गुणक को निर्दिष्ट करने के लिए इस गुण का उपयोग करें जो लेबल के पाठ को प्रदर्शित करते समय उपयोग करने के लिए स्वीकार्य फ़ॉन्ट आकार देता है। यदि आप इस गुण के लिए 0 का मान निर्दिष्ट करते हैं, तो वर्तमान फ़ॉन्ट आकार को सबसे छोटे फ़ॉन्ट आकार के रूप में उपयोग किया जाता है।

इसलिए यदि आपके लेबल के लिए डिफ़ॉल्ट फ़ॉन्ट आकार है 10, तो आप एक के 0.7fरूप में डालते हैं minimumScaleFactorऔर इसे उसी तरह करना चाहिए जैसे कि किया minimumFontSizeथा।


मैं भी सोचा था कि Thats; लेकिन यहां तक ​​कि जब मैं इसे 0.1f के रूप में डालता हूं, तो पाठ आकार को समायोजित नहीं करता है। मैं uilabel कोड जोड़ूंगा।
पदिन 215

क्या होगा यदि आप बाधाओं को दूर करते हैं और सिर्फ लेबल के फ्रेम को सिकोड़ते हैं?
कोवपस

9
Log139: आपका नंबरऑफलाइन किनके लिए सेट है? Apple का दस्तावेज़ीकरण कहता है कि मिनिममसेलेक्टर केवल तभी काम करता है जब नंबरऑफलाइन 1 पर सेट हो। 0 का उपयोग करना या 1 से अधिक कुछ भी काम नहीं करेगा।
SeanK

1
@ सीन यह काम करेगा भले ही नंबरऑफलाइन 1 से अधिक पर सेट हो लेकिन 0. नहीं
असदुल्लाह अली

12

अन्य उत्तरों के अलावा, मैं एक शुरुआत के अनुकूल विवरण जोड़ने जा रहा हूँ जिसने खुद को मदद की:

गणना कैसे करें minimumScaleFactor? अपने लेबल के डिफ़ॉल्ट फ़ॉन्ट आकार द्वारा अपने लेबल के न्यूनतम फ़ॉन्ट आकार को विभाजित करें। उदाहरण के लिए, आपका डिफ़ॉल्ट फ़ॉन्ट आकार 25 है। आपका न्यूनतम फ़ॉन्ट आकार 10 है।

10/25 = 0.4

0.4 आपकी minimumScaleFactorवैल्यू है। ऊपर दिए गए @ Jsdodgers का उत्तर भी देखें।

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