2013-02-14 16 views
6

मेरे पास निम्न सेल डिज़ाइन है जहां संख्यात्मक लेबल कम हो जाता है और "कुल मिलाकर" लेबल सीधे नीचे होता है।समायोजन का उपयोग करते समय केंद्र के लिए UILabel ऊंचाई निर्धारित करें FontSizeToFitWidth

enter image description here

मैं ठीक से adjustFontSizeToFitWidth और minimumFontSize गुण निर्धारित किया है। फ़ॉन्ट सही ढंग से आकार बदल रहा है। हालांकि, नीचे संख्यात्मक लेबल एंकरिंग चुनौतीपूर्ण है। विशेष रूप से जब फ़ॉन्ट दो लेबलों के बीच के अंतर को कम करता है और लंबवत केंद्रित दिखाई नहीं देता है।

मैंने sizeToFit, sizeThatFits, और फ़ॉन्ट के pointSize का उपयोग करने का प्रयास किया है। सभी असफल

मुझे sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode: के बारे में पता है, लेकिन मुझे समझ में नहीं आता कि मुझे इसे adjustFontSizeToFitWidth के संयोजन में क्यों चाहिए।

+0

क्या आपने 'आकार WithFont: minFontSize: realFontSize: forWidth: lineBreakMode: '? –

+0

मैंने इसे माना है। अद्यतन देखें। –

+0

क्या आप अपनी समस्या का पुन: प्रयास कर सकते हैं? मुझे लगता है कि मैं आपकी मदद कर सकता हूं लेकिन मुझे पूरा यकीन नहीं है कि आपकी सटीक समस्या क्या है। ऐसा लगता है कि आपको "123" लेबल का आकार बदलने के बाद "123" और "कुल मिलाकर" लेबल के लिए फ्रेम बदलना है। – FreeAsInBeer

उत्तर

2

आह, तो आप UILabels को कंटेनर दृश्य (क्षैतिज और लंबवत दोनों) के बीच में रखना चाहते हैं?

मैंने अपना जवाब दोहराया है ताकि भविष्य के पाठकों के लिए यह अधिक समझदार हो।

मेरे कोड संभालने है आप 3 IBOutlets सेट हो:

UIView *containerView; //Your nice view containing the two textfields. 
UILabel *points; //The label containing the number. 
UILabel *overall; //The textfield containing the text 'overall'. 

आप बस लेबल की फ्रेम सेट कर सकते हैं के बाद पाठ बताए और sizeToFit बुला।

  1. यह पहली पंक्ति UILabel अंक की स्थिति, केवल परिवर्तन किया जा रहा है कि y समन्वय खुद की ऊंचाई का containerView घटाना की आधी है।

    points.frame = CGRectMake(points.frame.origin.x, (containerView.frame.size.height/2) - (points.frame.size.height/2), points.frame.size.width, points.frame.size.height); 
    
  2. स्थिति के लिए overall तदनुसार - कहते हैं कि संख्या और कुल मिलाकर लेबल के बीच 6 कहना की दूरी है:

    int space = 6; 
    
    overall.frame = CGRectMake(overall.frame.origin.x, points.frame.origin.y + points.frame.size.height + space, overall.frame.size.width, overall.frame.size.height); 
    
  3. अपनी टिप्पणी को पढ़ने के बाद, मुझे लगता है कि आप इस समाधान के बाद कर रहे हैं। यदि आप मध्य में दिखाई देने के लिए UILabels दोनों चाहते हैं; y (नंबर 2 के कोड के नीचे इसे साथ) तो जैसे points का मूल्य से (overall.frame.size.height/2) + (space/2) घटाना:

    int space = 6; 
    points.frame = CGRectMake(points.frame.origin.x, ((containerView.frame.size.height/2) - (points.frame.size.height/2)) - ((overall.frame.size.height/2) + (space/2)), points.frame.size.width, points.frame.size.height); 
    overall.frame = CGRectMake(overall.frame.origin.x, points.frame.origin.y + points.frame.size.height + space, overall.frame.size.width, overall.frame.size.height); 
    

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

image depicting effect

+0

जबकि आप इसे 'squareView' कह रहे हैं, एक कंटेनर दृश्य वे जाने का तरीका हो सकता है। –

+0

मुझे लगता है कि आपके पास कुल स्कोर के लिए एक दृश्य है जिसमें यह अच्छी पृष्ठभूमि और दाईं ओर बिंदुएं हैं। मुझे इसे जो भी हो, उसका नाम बदलना चाहिए। अब यह 'कंटेनर व्यू' है - बहुत बेहतर! :) – Patrick

0

इसके बजाय दो लेबलों का उपयोग की, CATextLayer बजाय का उपयोग करें। आप आसानी से एक हिस्सा बोल्ड और अन्य सामान्य बनाने में सक्षम होंगे। एक परत के लिए प्लस स्थिति और समायोजन आकार दो लेबल रखने के लिए आसान सापेक्ष होगा।छाया सेटिंग, लाइन ब्रेक मोड, फोंट आप खूबसूरती से सब कुछ समायोजित करने में सक्षम होंगे :)

+0

मुझे भविष्य के लिए याद होगा। लेकिन इस बिंदु पर, सब कुछ एक UILabel के रूप में बनाया गया है और मैं बल्कि refactor नहीं होगा। इसके अलावा यह अब एक चुनौती है :) –

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