2013-09-27 11 views
6

के बीच अलग-अलग ऊंचाई प्रदान करता है हाल ही में एक्सकोड 5 का उपयोग करके आईओएस 7 में अपना ऐप अपडेट किया गया और पाया कि बाउंडिंगRectWithSize अलग-अलग ऊंचाई (आकार भाग में) को जिम्मेदार स्ट्रिंग्स की सीमाओं की गणना करता है। ।NSAttributedString boundingRectWithSize आईओएस 6 और आईओएस 7

CGRect rect = [self boundingRectWithSize:CGSizeMake(inWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil]; 

"स्व" एक NSAttributedString और "inWidth" है पिक्सल में अधिकतम चौड़ाई स्ट्रिंग में फिट करना चाहिए

:

निम्न पंक्ति मेरे iOS 6 और iOS 7 के बीच अलग-अलग परिणाम देता है

मुझे ऐसा लगता है क्योंकि आईओएस 7 में आईओएस 6 की तुलना में एक अलग फ़ॉन्ट हैंडलिंग है।

किसी को भी आईओएस संस्करणों पर एक स्ट्रिंग की ऊंचाई की गणना करने के लिए एक समाधान समाधान मिला है?

+0

हो सकता है कि इस लिंक आप की मदद करनी चाहिए http://stackoverflow.com/questions/19028743/ios7-uitextview-contentsize-height-alternative/19067476#19067476 – rajdurai

उत्तर

1

मुझे एक ही समस्या थी, मेरे लिए ऊंचाई पर एक साधारण छत() हल हो गई। आपके द्वारा जिम्मेदार स्ट्रिंग के लिए सही विशेषताओं को सेट करना भी सुनिश्चित करें।

@{NSParagraphStyleAttributeName: paragraphStyle, NSFontAttributeName : label.font} 
+0

इस समारोह-दस्तावेज में भी है: आईओएस में 7 और बाद में, यह विधि आंशिक आकार (लौटा सीजीआरईटी के आकार घटक में) लौटाती है; आकार के आकार में लौटा आकार का उपयोग करने के लिए, आपको छत समारोह का उपयोग करके निकटतम उच्च पूर्णांक में अपना मान बढ़ा देना चाहिए। लेकिन: आईओएस 6 में मुझे उदा। 18 और आईओएस 7 के साथ मुझे 16.799 999 मिलते हैं - इसलिए एक छत() मुझे 17 देता है। और यह सिर्फ टेक्स्ट की एक पंक्ति के लिए है, मल्टीलाइन टेक्स्ट के साथ यह और भी बदतर हो जाता है। – Heiko

7

हम नहीं कर सकते 4.3 से अधिक सभी iOS हम 7.0 और पिछले iOS के लिए सशर्त कोड लिखने के लिए है के लिए sizeWithAttributes का उपयोग करते हैं। तो मैं समाधान दिया उपयोग करने के लिए सुझाव

UILabel *gettingSizeLabel = [[UILabel alloc] init]; 
gettingSizeLabel.font = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16]; 
gettingSizeLabel.text = @"YOUR TEXT HERE"; 
gettingSizeLabel.numberOfLines = 0; 
CGSize maximumLabelSize = CGSizeMake(310, 9999); // this width will be as per your requirement 

CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize]; 

विकल्प काफी अच्छी तरह से और सशर्त कोड के बिना सभी आईओएस में सुचारू रूप से काम कर रहा है।