Intereting Posts
किसी एक को पूरा करने के लिए प्रतीक्षा करने के लिए एक विधि को बल दें अग्रभूमि दर्ज करने के बाद डेटा ताज़ा करें NSString: अग्रणी 0s हटाएं तो '00001234' '1234' हो जाता है? कब __bridge_transfer और __bridge का उपयोग करने के लिए आईओएस 6 में उपस्थित व्हय्यूकंट्रोलर का समर्थन करने वाला नहीं है कोर डेटा को बचाने के साथ अपरिचित चयनकर्ता अपवाद xcodebuild त्रुटि – SecKey एपीआई वापस आ गई: -25308 पिक्सल डेटा को स्विफ्ट में यूआईमेज / सीजीआईमेज से सरणी के रूप में प्राप्त करें स्ट्रिंग /। टेक्स्ट की अधिकतम लंबाई निर्धारित करना आईओओ – ऑटो लेआउट प्रोग्रामेटिक रूप से पर्यवेक्षण के केंद्र में स्थिति UIView किसी प्रकार की त्रुटियों को कैसे प्राप्त करें, एक विधि स्विफ्ट में उन्हें फेंक कर पकड़ सकती है इस popover वर्ग का नाम क्या है? पार्स एनेलिटिक्स कस्टम इवेंट्स ट्रैक नहीं करना उपयोगकर्ता द्वारा समाप्त होने पर MPMusicPlayerController को कैसे रोकें? Xost में iostream नहीं मिला

यूआईबुटन के शीर्षक लेबल शब्द लपेटें पूंछ कटौती के साथ

मुझे शब्द लपेटने और पूंछ के titleLabel को सक्षम करने की आवश्यकता है, एक ही समय में, UIButton के titleLabel नंबर सेट करना 0 से अधिक कुछ काम नहीं करता है, टेक्स्ट एक पंक्ति पर रहता है।

मैंने पहले से ही आसपास खोज की है और मुझे समाधान नहीं मिला है कोई उपाय?

Solutions Collecting From Web of "यूआईबुटन के शीर्षक लेबल शब्द लपेटें पूंछ कटौती के साथ"

यह सही नहीं है:

 lblTemp.lineBreakMode = NSLineBreakByWordWrapping | NSLineBreakByTruncatingTail lblTemp.numberOfLines = 0; 

NSLineBreakMode को NSParagraphStyle.h में परिभाषित किया गया है:

 typedef NS_ENUM(NSInteger, NSLineBreakMode) { /* What to do with long lines */ NSLineBreakByWordWrapping = 0, /* Wrap at word boundaries, default */ NSLineBreakByCharWrapping, /* Wrap at character boundaries */ NSLineBreakByClipping, /* Simply clip */ NSLineBreakByTruncatingHead, /* Truncate at head of line: "...wxyz" */ NSLineBreakByTruncatingTail, /* Truncate at tail of line: "abcd..." */ NSLineBreakByTruncatingMiddle /* Truncate middle of line: "ab...yz" */ } NS_ENUM_AVAILABLE_IOS(6_0); 

ध्यान दें कि यह एक NS_ENUM है, न कि एक एनएस_एपीटीएन, इसलिए इसका अर्थ मास्क के रूप में प्रयोग नहीं किया गया है। अधिक जानकारी के लिए यह देखें

वास्तविकता में | | उन स्थिरांक पर ऑपरेटर NSLineBreakByTruncatingTail से मेल खाती है:

 (NSLineBreakByWordWrapping | NSLineBreakByTruncatingTail) == 4 NSLineBreakByTruncatingTail == 4 

जहाँ तक मुझे पता है, कोर टेक्स्ट में अंतिम पंक्ति को कम करके और शब्द लपेटने से भी सरल CTFramesetterCreateWithAttributedString और CTFrameDraw APIs के साथ नहीं किया जा सकता, लेकिन लाइन लेआउट द्वारा लाइन के साथ किया जा सकता है, जो UILabel को करना चाहिए।

आईओएस 6 NSStringDrawing.h में नए ड्राइंग एपीआई को उजागर करके यह सरल करता है:

 typedef NS_ENUM(NSInteger, NSStringDrawingOptions) { NSStringDrawingTruncatesLastVisibleLine = 1 << 5, // Truncates and adds the ellipsis character to the last visible line if the text doesn't fit into the bounds specified. Ignored if NSStringDrawingUsesLineFragmentOrigin is not also set. NSStringDrawingUsesLineFragmentOrigin = 1 << 0, // The specified origin is the line fragment origin, not the base line origin NSStringDrawingUsesFontLeading = 1 << 1, // Uses the font leading for calculating line heights NSStringDrawingUsesDeviceMetrics = 1 << 3, // Uses image glyph bounds instead of typographic bounds } NS_ENUM_AVAILABLE_IOS(6_0); @interface NSAttributedString (NSExtendedStringDrawing) - (void)drawWithRect:(CGRect)rect options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(6_0); - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(6_0); @end 

तो अगर आप यूआईएलबल का प्रयोग कर रहे हैं, तो आप चाहते हैं कि आपके एनएसएटीटेड स्ट्रिंग्स के एनएसपीएराग्राफ़ स्टाइल या लाइनब्रेकमोड लेबल पर खुद को सेट करें:

 NSLineBreakByTruncatingTail 

और लेबल पर नंबरऑफ़लाइन संपत्ति को 0 पर सेट होना चाहिए

संख्याओफ़लाइन पर यूआईएलएबल हेडर से:

 // if the height of the text reaches the # of lines or the height of the view is less than the # of lines allowed, the text will be // truncated using the line break mode. 

यूआईएलबल दस्तावेज से:

 This property controls the maximum number of lines to use in order to fit the label's text into its bounding rectangle. The default value for this property is 1. To remove any maximum limit, and use as many lines as needed, set the value of this property to 0. If you constrain your text using this property, any text that does not fit within the maximum number of lines and inside the bounding rectangle of the label is truncated using the appropriate line break mode. 

यूआईएलएबल की कुछ हद तक अस्पष्ट सुविधा के साथ उभरने वाली एकमात्र समस्या यह है कि आप ड्राइंग से पहले आकार प्राप्त नहीं कर सकते (जो कि कुछ यूआईटीबल्यूव्यू + यूआईटीएबल वीक्सेल गतिशील लेआउट के लिए आवश्यक है) बिना एनएसटीटीएटेड स्ट्रिंग के एनएसपीएराग्राफ़ स्टाइल को संशोधित करने के बिना।

आईओएस 6.1.4 के रूप में, कॉलिंग-बाउलिंग राइट विथ साइज़: ऑप्शन्स: एनएसटीएटीब्रिएटेड स्ट्रिंग के साथ प्रसंग जो कि एनएसएलइनब्रैकबीआईटीट्रकिंगिंग टेल लाइन ब्रेक मोड (यूआईएलएबल के लिए) है, एक गलत लाइन लाइन की ऊंचाई देता है , भले ही निम्नलिखित विकल्प पारित हो जाएं:

 (NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine) 

(कृपया ध्यान दें कि NSStringDrawingUsesLineFragmentOrigin बहु पंक्ति स्ट्रिंग के लिए एक आवश्यकता है।)

इससे भी बदतर क्या है कि यूआईएलबल की लाइनरेकॉम्ड ने एनएसएटीटेड सर्टिंग पैराग्राफ शैली को ओवरराइड नहीं किया है, इसलिए आपको अपने साइजिंग गणना के लिए स्ट्रेट के पैराग्राफ स्ट्रेट्स को श्रेय देना होगा, और बाद में इसे यूआईएलएबल में गुजारने के लिए करना होगा ताकि वह उसे आकर्षित कर सके।

वह है, एनएसएलइनब्रैकबैडउपिंगिंग फॉर -बाउंडिंग रीक्डविथ साइज़: ऑप्शंस: प्रेजेंटेशन और एनएसएलइनब्रैकबीटीट्रैन्केटिंगटैब के लिए यूआईएलएबल (इसलिए यह एनएसएसटीइंग ड्राइंगट्रनकेट्सलस्टविज़ीनलाइन आंतरिक का उपयोग कर सकता है, या जो भी आखिरी पंक्ति को क्लिप कर सकता है)

एकमात्र विकल्प यदि आप अपनी स्ट्रिंग के पैराग्राफ शैली को एक से अधिक बार बदलना नहीं चाहते हैं, तो एक सरल UIView उपवर्ग जो ओवरराइड -डॉरेक्ट करें: (उचित सामग्री के साथ-साथ फिर से रेड्रॉ पर सेट करें), और आईओएस 6 का नया ड्राइंग एपीआई :

 - (void)drawWithRect:(CGRect)rect options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(6_0); 

विकल्प के रूप में NSLineBreakByWordWrapping और पासिंग (NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine) का उपयोग करने के लिए याद रखना

अंत में, आईओएस 6 से पहले, यदि आप वर्चुअल रैपिंग करना चाहते हैं, तो एक स्ट्रिंग के लिए पूंछ काटने के लिए आपको कोर टेक्स्ट के साथ लाइन लेआउट के जरिए लाइन करना होगा।

मैंने इसे उसी दिन हल किया, जिस दिन मैंने UIButton शीर्ष पर एक UIButton डालकर UIButton पर सेट किया था। मैंने यह स्वीकार नहीं किया था कि क्या कोई बेहतर विचार था, लेकिन जाहिरा तौर पर कोई दूसरा समाधान नहीं है।

 [self.costomButton.titleLabel setTextAlignment:UITextAlignmentLeft]; [self.costomButton.titleLabel setNumberOfLines:3]; 

सुनिश्चित करें कि आपको Alignment पहले ps सेट करना चाहिए: यह केवल तभी काम करता है जब सिस्टम संस्करण 5.0 से बड़ा होता है

संख्या को सेट करने की कोशिश करेंऑफ़लाइन 2 से अधिक, और उसके अनुसार ऊंचाई निर्धारित करें

  m_button = [UIButton buttonWithType:UIButtonTypeCustom]; [m_button setFrame:CGRectMake(isLandscape?20:10, 40, isLandscape?300:250, 40)]; m_button.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:17]; [m_btnDiscoverPoint setTitle:@"Title" forState:UIControlStateNormal]; CGRect buttonFrame = [m_button frame]; if ([m_button.titleLabel.text length]>0) { CGSize suggestedSize = [m_button.titleLabel.text sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:17] constrainedToSize:CGSizeMake(FLT_MAX,m_button.frame.size.height) lineBreakMode:UILineBreakModeWordWrap]; if (suggestedSize.width >= self.view.frame.size.width) { suggestedSize.width = self.view.frame.size.width-10; suggestedSize.height=suggestedSize.height+20; m_button.titleLabel.numberOfLines=2; } else{ m_button.titleLabel.numberOfLines=1; } buttonFrame.size.width = suggestedSize.width; [m_button setFrame:buttonFrame]; } [m_button setBackgroundColor:[UIColor clearColor]]; [m_button addTarget:self action:@selector(btnClickAction) forControlEvents:UIControlEventTouchUpInside]; 
 button.titleLabel.numberOfLines = 2; button.titleLabel.lineBreakMode = UILineBreakModeWordWrap; UIFont * theFont = [UIFont systemFontOfSize: 14]; // you set CGSize textSize = [titleStr sizeWithAttributes:@{NSFontAttributeName: theFont}]; CGFloat theWidth = kScreenWidth-otherWidthYouSet;// I thought the button's frame is content driving ,and is limited CGFloat ratio = theWidth*heightYouSet/((textSize.width+4)*(textSize.height+6));// 4 , 6 , is made by experience . I think the textSize is taken one line text default by the system NSUInteger validNum = ratio * titleStr.length; if(ratio<1){ [button setTitle: [[titleStr substringToIndex: validNum] stringByAppendingString: @"..."] state: yourState]; } else{ [button setTitle: titleStr state: yourState]; } 

आप बिटवर्ड या ऑपरेटर का उपयोग कर एक लेबल से अधिक एक लाइनब्रेकमोड निर्दिष्ट कर सकते हैं।

उदाहरण के लिए, निम्न कोड लेबल के पाठ को लपेटता है, और जब वह लेबल की फ़्रेम ऊंचाई के आकार के ऊपर विस्तारित होता है तो पाठ की पूंछ के अंत में एलीपिसिस को जोड़ देगा।

 lblTemp.lineBreakMode = UILineBreakModeWordWrap | UILineBreakModeTailTruncation; lblTemp.numberOfLines = 0; 

अद्यतनः यह सही नहीं है। ऐसा लगता है क्योंकि UILineBreakModeWordWrap enum में 0 है। नीचे टिप्पणी देखें

सभी यूआई गुणों को आईओएस के बजाय NS संकेताक्षर के बजाय आईओएस में पदावनत किया गया है। जैसा कि यहां दिखाया गया उदाहरण – NSLineBreakByTruncatingMiddle