कैसे चेक करें कि क्या उइलैबेल को काट दिया गया है?


105

मेरे पास एक UILabel ऐसी लंबाई हो सकती है जो इस बात पर निर्भर करती है कि मेरा ऐप आईफोन या आईपैड पर पोर्ट्रेट या लैंडस्केप मोड में चल रहा है या नहीं। जब टेक्स्ट एक लाइन पर दिखाने के लिए बहुत लंबा होता है और यह छोटा हो जाता है तो मैं चाहता हूं कि उपयोगकर्ता इसे दबा सके और पूर्ण टेक्स्ट का पॉपअप प्राप्त कर सके।

मैं यह देखने के लिए कैसे जांच कर सकता हूं UILabelकि क्या पाठ को काट रहा है? क्या यह भी संभव है? अभी मैं अलग-अलग लंबाई के लिए जाँच कर रहा हूं कि मैं किस मोड पर हूं लेकिन यह सुपर अच्छी तरह से काम नहीं करता है।



इन सभी वर्षों के बाद विश्वास नहीं किया जा सकता है कि Apple ने अभी भी UILabelएपीआई के रूप में मूल रूप से कुछ को शामिल नहीं किया है ।
फंक्शनल 7

जवाबों:


108

आप स्ट्रिंग की चौड़ाई की गणना कर सकते हैं और देख सकते हैं कि चौड़ाई से अधिक है या नहींlabel.bounds.size.width

NSString UIKit परिवर्धन में एक विशिष्ट फ़ॉन्ट के साथ स्ट्रिंग के आकार की गणना करने के कई तरीके हैं। हालाँकि, यदि आपके पास अपने लेबल के लिए एक मिनिमम फोन्स है, जो सिस्टम को उस आकार के पाठ को सिकोड़ने की अनुमति देता है। आप sizeWithFont: minFontSize: realFontSize: forWidth: lineBreakMode: का उपयोग करना चाह सकते हैं ।

CGSize size = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];
if (size.width > label.bounds.size.width) {
   ...
}

1
धन्यवाद, यह वही है जो मुझे चाहिए था। एकमात्र अंतर था, sizeWithFont: CGSize देता है।
रान्डेल

आह, यह इंगित करने के लिए धन्यवाद, मैंने नमूना कोड सही कर दिया है।
progrmr

16
sizeWithFont का उपयोग किया जाता है
अमेलिया। .५

2
@fatuhoku numberOfLinesने UILabelकक्षा के संदर्भ में उल्लिखित टेक्स्ट को प्रदर्शित करने के लिए उपयोग की जाने वाली अधिकतम पंक्तियाँ लौटा दीं : developer.apple.com/library/ios/documentation/UIKit/Reference/…
पॉल

1
यदि लेबल में लाइन की संख्या है, तो इस तरह की लाइन की संख्या के साथ गुणा की कोशिश करें यदि (size.width> label.bounds.size. उपलब्धता * label.numberOfLines) {...}
Fadi Abuzant

89

स्विफ्ट (विस्तार के रूप में) - मल्टी लाइन यूलेबेल के लिए काम करता है:

swift4: ( attributesका परम boundingRectहल्के से बदल दिया)

extension UILabel {

    var isTruncated: Bool {

        guard let labelText = text else {
            return false
        }

        let labelTextSize = (labelText as NSString).boundingRect(
            with: CGSize(width: frame.size.width, height: .greatestFiniteMagnitude),
            options: .usesLineFragmentOrigin,
            attributes: [.font: font],
            context: nil).size

        return labelTextSize.height > bounds.size.height
    }
}

swift3:

extension UILabel {

    var isTruncated: Bool {

        guard let labelText = text else { 
            return false
        }

        let labelTextSize = (labelText as NSString).boundingRect(
            with: CGSize(width: frame.size.width, height: .greatestFiniteMagnitude),
            options: .usesLineFragmentOrigin,
            attributes: [NSFontAttributeName: font],
            context: nil).size

        return labelTextSize.height > bounds.size.height
    }
}

swift2:

extension UILabel {

    func isTruncated() -> Bool {

        if let string = self.text {

            let size: CGSize = (string as NSString).boundingRectWithSize(
                CGSize(width: self.frame.size.width, height: CGFloat(FLT_MAX)),
                options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                attributes: [NSFontAttributeName: self.font],
                context: nil).size

            if (size.height > self.bounds.size.height) {
                return true
            }
        }

        return false
    }

}

999999.0 की ऊंचाई CGFloat (FLT_MAX) के साथ बदलें
परिवेश

2
स्विफ्ट 3 के लिए मैं CGFloat.greatestFiniteMagnitude
zero3nna

2
अच्छा उत्तर लेकिन फंक के बजाय गणना की गई संपत्ति का उपयोग करने के लिए बेहतर है: var isTruncated: Bool {यदि string = self.text {Let size: CGSize = (string as NSString) .urbingRect (with: CGSize (चौड़ाई: self.frame.size) । उपलब्धता, ऊँचाई: CGFloat.greatestFiniteMagnitude), विकल्प: NSStringDrawingOptions.usesLineFragmentOrigin, विशेषताएँ: [NSFontAttributeName: self.font], संदर्भ: nil) .ize (size.height> self.bounds.size.heize.hee.ight)।
Mohammadalijf

1
यह मेरे लिए काम नहीं किया क्योंकि मैं एक NSAttributedString का उपयोग कर रहा था। काम करने के लिए इसे पाने के लिए, मैं उपयोग के लिए गुण मूल्य को संशोधित करने की जरूरत: attributedText .attributes (शून्य पर:: 0, effectiveRange)?
pulse4life

1
महान जवाब, इसे मेरी आवश्यकताओं के लिए थोड़ा बदलना पड़ा, लेकिन पूरी तरह से काम किया। मैं भी एक जिम्मेदार स्ट्रिंग का उपयोग कर रहा था - इसलिए मेरे द्वारा उपयोग की जाने वाली विशेषताओं के लिए: (एट्रिब्यूटेड टेक्ट? .टैन्टेज (at: 0, प्रभावीरेंज: nil) ?? [[.font: font]), बस यह जांचना सुनिश्चित करें कि लेबलटेक्स्ट कब खाली नहीं है इस समाधान का उपयोग कर।
क्रेट ग्रेगोरिक

20

संपादित करें: मैंने अभी देखा कि मेरा उत्तर रद्द कर दिया गया था, लेकिन मैंने जो कोड स्निपेट दिया है वह पदावनत है।
अब ऐसा करने का सबसे अच्छा तरीका है (ARC):

NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.lineBreakMode = mylabel.lineBreakMode;
NSDictionary *attributes = @{NSFontAttributeName : mylabel.font,
                             NSParagraphStyleAttributeName : paragraph};
CGSize constrainedSize = CGSizeMake(mylabel.bounds.size.width, NSIntegerMax);
CGRect rect = [mylabel.text boundingRectWithSize:constrainedSize
                                         options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                      attributes:attributes context:nil];
if (rect.size.height > mylabel.bounds.size.height) {
    NSLog(@"TOO MUCH");
}

नोट गणना आकार पूर्णांक मान नहीं है। इसलिए यदि आप ऐसा करते हैं int height = rect.size.height, तो आप कुछ फ़्लोटिंग पॉइंट सटीक खो देंगे और गलत परिणाम हो सकते हैं।

पुराना उत्तर (पदावनत):

यदि आपका लेबल मल्टीलाइन है, तो आप इस कोड का उपयोग कर सकते हैं:

CGSize perfectSize = [mylabel.text sizeWithFont:mylabel.font constrainedToSize:CGSizeMake(mylabel.bounds.size.width, NSIntegerMax) lineBreakMode:mylabel.lineBreakMode];
if (perfectSize.height > mylabel.bounds.size.height) {
    NSLog(@"TOO MUCH");
}

13

आप यूबिल के साथ एक श्रेणी बना सकते हैं

- (BOOL)isTextTruncated

{
    CGRect testBounds = self.bounds;
    testBounds.size.height = NSIntegerMax;
    CGRect limitActual = [self textRectForBounds:[self bounds] limitedToNumberOfLines:self.numberOfLines];
    CGRect limitTest = [self textRectForBounds:testBounds limitedToNumberOfLines:self.numberOfLines + 1];
    return limitTest.size.height>limitActual.size.height;
}

3
डॉक्टर से: textRectForBounds:limitedToNumberOfLines:"आपको इस पद्धति को सीधे कॉल नहीं करना चाहिए" ...
मार्टिन

@ मैं आपको धन्यवाद देता हूं, मैं देखता हूं कि यहां पर कार्यान्वयन सीमित है। लेकिन जब आप इस विधि को सीमा और पाठ स्थापित करने के बाद कहते हैं, तो यह अच्छी तरह से काम करेगा
डोंगएक्सयू

जब आप सीमितToNumberOfLines सेट करते हैं तो आप +1 क्यों करते हैं?
ऐश

@ यह जांचने के लिए कि क्या लेबल अधिक है जब इसे पाठ के लिए अधिक कमरे की अनुमति दी जाती है।
vrwim

1
इस कोड के लिए धन्यवाद, इसने मेरे लिए ऑटो लेआउट का उपयोग करते समय कुछ सीमा मामलों से अलग काम किया। मैंने उन्हें जोड़कर तय किया: setNeedsLayout() layoutIfNeeded()विधि की शुरुआत में।
जोवान जोवानोवस्की

9

इस श्रेणी का उपयोग यह जानने के लिए करें कि क्या आईओएस 7 और इसके बाद के संस्करण पर एक लेबल को काट दिया गया है।

// UILabel+Truncation.h
@interface UILabel (Truncation)

@property (nonatomic, readonly) BOOL isTruncated;

@end


// UILabel+Truncation.m
@implementation UILabel (Truncation)

- (BOOL)isTruncated
{
    CGSize sizeOfText =
      [self.text boundingRectWithSize:CGSizeMake(self.bounds.size.width, CGFLOAT_MAX)
                               options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                            attributes:@{ NSFontAttributeName : label.font } 
                               context: nil].size;

    if (self.frame.size.height < ceilf(sizeOfText.height))
    {
        return YES;
    }
    return NO;
}

@end

9

स्विफ्ट 3

आप स्ट्रिंग को असाइन करने के बाद लाइनों की संख्या को गिन सकते हैं और लेबल की अधिकतम संख्या की तुलना कर सकते हैं।

import Foundation
import UIKit

extension UILabel {

    func countLabelLines() -> Int {
        // Call self.layoutIfNeeded() if your view is uses auto layout
        let myText = self.text! as NSString
        let attributes = [NSFontAttributeName : self.font]

        let labelSize = myText.boundingRect(with: CGSize(width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: attributes, context: nil)
        return Int(ceil(CGFloat(labelSize.height) / self.font.lineHeight))
    }

    func isTruncated() -> Bool {

        if (self.countLabelLines() > self.numberOfLines) {
            return true
        }
        return false
    }
}

यह स्विफ्ट के लिए अच्छा जवाब है। धन्यवाद।
जिम्मीली

8

IDev के उत्तर में जोड़ने के लिए , आपको intrinsicContentSizeइसके बजाय इसका उपयोग करना चाहिए frame, ताकि यह ऑटोलाययूट के लिए काम कर सके

- (BOOL)isTruncated:(UILabel *)label{
        CGSize sizeOfText = [label.text boundingRectWithSize: CGSizeMake(label.intrinsicContentSize.width, CGFLOAT_MAX)
                                                     options: (NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                                  attributes: [NSDictionary dictionaryWithObject:label.font forKey:NSFontAttributeName] context: nil].size;

        if (self.intrinsicContentSize.height < ceilf(sizeOfText.height)) {
        return YES;
    }
    return NO;
}

धन्यवाद! फ्रेम के बजाय इंट्रिन्सिक कॉन्टेंटसाइज़ का उपयोग मेरी समस्या का समाधान था जब उइबेल ऊँचाई वास्तव में पाठ को फिट करने के लिए पर्याप्त है, लेकिन इसमें सीमित संख्या में लाइनें हैं और इस प्रकार अभी भी छोटा है।
एंटन माटोसोव

किसी कारण से, यह तब भी NO लौट रहा है जब पाठ लेबल में फिट नहीं होता है
Can Poyrazoğlu

6

यह बात है। यह attributedTextवापस मैदान में आने से पहले काम करता है text, जो हमारे लिए उन लोगों के लिए बहुत मायने रखता है जो कई फ़ॉन्ट परिवारों, आकारों और यहां तक ​​कि NSTextAttachments से निपटते हैं!

ऑटोलैयूट के साथ ठीक काम करता है, लेकिन जाहिर है कि बाधाओं को परिभाषित किया जाना चाहिए और जांचने से पहले सेट किया जाना चाहिए isTruncated, अन्यथा लेबल खुद को भी पता नहीं होगा कि कैसे खुद को बाहर रखना है, इसलिए कोई रास्ता नहीं भी पता चलेगा कि क्या इसकी काट है।

यह सिर्फ एक सादे के साथ इस समस्या का काम नहीं करता है NSStringऔर sizeThatFits। मुझे यकीन नहीं है कि कैसे लोगों को उस तरह सकारात्मक परिणाम मिल रहे थे। BTW, जैसा कि कई बार उल्लेख किया गया है, का उपयोग sizeThatFitsकरना बिल्कुल भी आदर्श नहीं है क्योंकि यह numberOfLinesपरिणामी आकार को ध्यान में रखता है , जो कि हम जो करने की कोशिश कर रहे हैं, उसके पूरे उद्देश्य को हरा देता है, क्योंकि isTruncatedहमेशा falseइसकी परवाह किए बिना वापस आ जाएगा या नहीं।

extension UILabel {
    var isTruncated: Bool {
        layoutIfNeeded()

        let rectBounds = CGSize(width: bounds.width, height: .greatestFiniteMagnitude)
        var fullTextHeight: CGFloat?

        if attributedText != nil {
            fullTextHeight = attributedText?.boundingRect(with: rectBounds, options: .usesLineFragmentOrigin, context: nil).size.height
        } else {
            fullTextHeight = text?.boundingRect(with: rectBounds, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil).size.height
        }

        return (fullTextHeight ?? 0) > bounds.size.height
    }
}

मेरे लिए यह ठीक काम धन्यवाद! क्या इसके लिए कोई अपडेट या संशोधन है?
आमोदकांटे

बहुत बढ़िया जवाब। केवल समस्या यह है कि जब आप इसे सेट नहीं करते हैं तो केवल समस्या कभी भी शून्य नहीं होती है। इसलिए, मैंने इसे दो संस्करणों के रूप में कार्यान्वित किया है isTextTruncated और isAttributedTextTruncated।
हैरिस

@Harris यह कहता है कि डिफ़ॉल्ट uilabel.h फ़ाइल में नहीं के बराबर है
लुकास

@LucasChwe मुझे पता है, लेकिन यह व्यवहार में सच नहीं है। आप इसे अपने लिए आजमा सकते हैं और देख सकते हैं। फ़िए
हैरिस

3

यहां स्विफ्ट 3 (विस्तार के रूप में) में चयनित उत्तर दिया गया है। ओपी 1 लाइन लेबल के बारे में पूछ रहा था। मेरे द्वारा यहां किए गए कई स्विफ्ट उत्तरों में से कई मल्टी-लाइन लेबल के लिए विशिष्ट हैं और सिंगल लाइन लेबल पर सही ढंग से फ़्लैग नहीं कर रहे हैं।

extension UILabel {
    var isTruncated: Bool {
        guard let labelText = text as? NSString else {
            return false
        }
        let size = labelText.size(attributes: [NSFontAttributeName: font])
        return size.width > self.bounds.width
    }
}

एक्सल का जवाब इसके लिए कारगर नहीं था। यह एक किया। धन्यवाद!
ग्लेन

2

यह iOS 8 के लिए काम करता है:

CGSize size = [label.text boundingRectWithSize:CGSizeMake(label.bounds.size.width, NSIntegerMax) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : label.font} context:nil].size;

if (size.height > label.frame.size.height) {
    NSLog(@"truncated");
}

2

मैंने उइबेल के ट्रंकेशन के साथ काम करने के लिए एक श्रेणी लिखी है। IOS 7 और बाद में काम करता है। आशा करता हूँ की ये काम करेगा ! उलीबेल टेल ट्रंकेशन

@implementation UILabel (Truncation)

- (NSRange)truncatedRange
{
    NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:[self attributedText]];

    NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
    [textStorage addLayoutManager:layoutManager];

    NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:[self bounds].size];
    textContainer.lineFragmentPadding = 0;
    [layoutManager addTextContainer:textContainer];

    NSRange truncatedrange = [layoutManager truncatedGlyphRangeInLineFragmentForGlyphAtIndex:0];
    return truncatedrange;
}

- (BOOL)isTruncated
{
    return [self truncatedRange].location != NSNotFound;
}

- (NSString *)truncatedText
{
    NSRange truncatedrange = [self truncatedRange];
    if (truncatedrange.location != NSNotFound)
    {
        return [self.text substringWithRange:truncatedrange];
    }

    return nil;
}

@end

हर बार यह NSNotFound को केवल
Dari

2
extension UILabel {

public func resizeIfNeeded() -> CGFloat? {
    guard let text = text, !text.isEmpty else { return nil }

    if isTruncated() {
        numberOfLines = 0
        sizeToFit()
        return frame.height
    }
    return nil
}

func isTruncated() -> Bool {
    guard let text = text, !text.isEmpty else { return false }

    let size: CGSize = text.size(withAttributes: [NSAttributedStringKey.font: font])
    return size.width > self.bounds.size.width
    }
}

आप स्ट्रिंग की चौड़ाई की गणना कर सकते हैं और देख सकते हैं कि चौड़ाई लेबल की चौड़ाई से अधिक है या नहीं।


1

@IDev ने जो किया, उसे जोड़ने के लिए , मैंने self.frame.size.heightउपयोग करने के लिए संशोधित किया और उपयोग label.frame.size.heightनहीं किया NSStringDrawingUsesLineFontLeading। उन संशोधनों के बाद, मैंने सही गणना की कि ट्रंकेशन कब होगा (कम से कम मेरे मामले के लिए)।

- (BOOL)isTruncated:(UILabel *)label {
    CGSize sizeOfText = [label.text boundingRectWithSize: CGSizeMake(label.bounds.size.width, CGFLOAT_MAX)
                                                 options: (NSStringDrawingUsesLineFragmentOrigin)
                                              attributes: [NSDictionary dictionaryWithObject:label.font forKey:NSFontAttributeName] context: nil].size;

    if (label.frame.size.height < ceilf(sizeOfText.height)) {
        return YES;
    }
    return NO;
}

1

boundingRect(with:options:attributes:context:)ऑटोलॉययूट का उपयोग करते समय (अधिकतम ऊंचाई निर्धारित करने के लिए) और एक जिम्मेदार पाठ के साथ मेरे पास समस्याएं थींNSParagraph.lineSpacing

लाइनों के बीच रिक्ति को नजरअंदाज कर दिया गया था (यहां तक ​​कि जब विधि में पास किया attributesगया था boundingRect) तो लेबल को माना जा सकता है जब यह नहीं था।

मुझे जो समाधान मिला वह उपयोग करना है UIView.sizeThatFits:

extension UILabel {
    var isTruncated: Bool {
        layoutIfNeeded()
        let heightThatFits = sizeThatFits(bounds.size).height
        return heightThatFits > bounds.size.height
    }
}

0

क्योंकि उपर्युक्त सभी उत्तर मूल्यह्रास विधियों का उपयोग करते हैं, मुझे लगा कि यह उपयोगी हो सकता है:

- (BOOL)isLabelTruncated:(UILabel *)label
{
    BOOL isTruncated = NO;

    CGRect labelSize = [label.text boundingRectWithSize:CGSizeFromString(label.text) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : label.font} context:nil];

    if (labelSize.size.width / labelSize.size.height > label.numberOfLines) {

        isTruncated = YES;
    }

    return isTruncated;
}

आप चौड़ाई को चौड़ाई से विभाजित कर रहे हैं और यदि यह पंक्ति की संख्या से बड़ी है (जो कि बहुत अच्छी तरह से 0 हो सकती है) तो आप कह रहे हैं कि लेबल छोटा है। इस काम का कोई तरीका नहीं है।
कर सकते हैं Leloğlu

@ CanLeloğlu कृपया इसका परीक्षण करें। यह एक कार्यशील उदाहरण है।
राज

2
क्या होगा अगर नंबरऑफलाइन शून्य के बराबर है?
कर सकते हैं Leloğlu

0

IOS 6 को संभालने के लिए (हाँ, हममें से कुछ को अभी भी), यहाँ @ iDev के उत्तर का एक और विस्तार है। मुख्य टेकअवे, iOS 6 के लिए, यह सुनिश्चित करने के लिए है कि आपके UILabel का नंबरऑफलाइन, sizeThatFits को कॉल करने से पहले 0 पर सेट है; यदि नहीं, तो यह आपको एक परिणाम देगा जो कहता है कि "अंक को ऊंचाई के लायक संख्याओं को आकर्षित करने के लिए" लेबल पाठ को आकर्षित करने के लिए आवश्यक है।

- (BOOL)isTruncated
{
    CGSize sizeOfText;

    // iOS 7 & 8
    if([self.text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])
    {
        sizeOfText = [self.text boundingRectWithSize:CGSizeMake(self.bounds.size.width,CGFLOAT_MAX)
                                             options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                          attributes:@{NSFontAttributeName:self.font}
                                             context:nil].size;
    }
    // iOS 6
    else
    {
        // For iOS6, set numberOfLines to 0 (i.e. draw label text using as many lines as it takes)
        //  so that siteThatFits works correctly. If we leave it = 1 (for example), it'll come
        //  back telling us that we only need 1 line!
        NSInteger origNumLines = self.numberOfLines;
        self.numberOfLines = 0;
        sizeOfText = [self sizeThatFits:CGSizeMake(self.bounds.size.width,CGFLOAT_MAX)];
        self.numberOfLines = origNumLines;
    }

    return ((self.bounds.size.height < sizeOfText.height) ? YES : NO);
}

0

इन दोनों में से किसी एक को कॉल करना न भूलें।

public extension UILabel {

    var isTextTruncated: Bool {
        layoutIfNeeded()
        return text?.boundingRect(with: CGSize(width: bounds.width, height: .greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font!], context: nil).size.height ?? 0 > bounds.size.height
    }

    var isAttributedTextTruncated: Bool {
        layoutIfNeeded()
        return attributedText?.boundingRect(with: CGSize(width: bounds.width, height: .greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil).size.height ?? 0 > bounds.size.height
    }

}

0

स्विफ्ट 5

एक बहु-पंक्तिबद्ध यूइबेल के लिए उदाहरण जो केवल 3 लाइनों को प्रदर्शित करने के लिए सेट किया गया है।

    let labelSize: CGSize = myLabel.text!.size(withAttributes: [.font: UIFont.systemFont(ofSize: 14, weight: .regular)])

    if labelSize.width > myLabel.intrinsicContentSize.width * 3 {
        // your label will truncate
    }

यद्यपि उपयोगकर्ता "टेक्स्ट की चौड़ाई" को जोड़कर एक अतिरिक्त लाइन जोड़ने के लिए वापसी कुंजी का चयन कर सकता है, उस स्थिति में भी कुछ इस तरह से उपयोगी हो सकता है।

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

    if text == "\n" {
        // return pressed 

    }
}

-1

स्विफ्ट 3 समाधान

मुझे लगता है कि सबसे अच्छा समाधान यह है (1)UILabel उसी गुण के साथ बनाएं जिस लेबल को आप ट्रंकेशन के लिए जाँच रहे हैं, (2) कॉल .sizeToFit(), (3) डमी लेबल की विशेषताओं की आपके वास्तविक लेबल के साथ तुलना करें।

उदाहरण के लिए, यदि आप यह जांचना चाहते हैं कि एक पंक्तिबद्ध लेबल जिसमें चौड़ाई अलग-अलग है या नहीं, तो आप इस उत्पाद का उपयोग कर सकते हैं:

extension UILabel {
    func isTruncated() -> Bool {
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: CGFloat.greatestFiniteMagnitude, height: self.bounds.height))
        label.numberOfLines = 1
        label.font = self.font
        label.text = self.text
        label.sizeToFit()
        if label.frame.width > self.frame.width {
            return true
        } else {
            return false
        }
    }
}

... लेकिन फिर से, आप अपनी आवश्यकताओं के अनुसार उपरोक्त कोड को आसानी से संशोधित कर सकते हैं। तो मान लीजिए कि आपका लेबल बहुस्तरीय है और इसकी ऊँचाई अलग है। फिर एक्सटेंशन कुछ इस तरह दिखाई देगा:

extension UILabel {
    func isTruncated() -> Bool {
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude))
        label.numberOfLines = 0
        label.font = self.font
        label.text = self.text
        label.sizeToFit()
        if label.frame.height > self.frame.height {
            return true
        } else {
            return false
        }
    }
}

-6

यह लेबल के लिए शीर्षक विशेषता को सेट करना आसान नहीं होगा, इसे सेट करने पर हॉवर होने पर पूर्ण लेबल प्रदर्शित होगा।

आप लेबल की लंबाई और div चौड़ाई (लंबाई में कनवर्ट - jQuery / जावास्क्रिप्ट - मैं एक पिक्सेल मान (20px) को एक संख्या मान (20) में कैसे बदल सकता हूं) की गणना कर सकता हूं

यदि लंबाई div चौड़ाई से अधिक है तो शीर्षक सेट करने के लिए jquery निर्धारित करें।

var divlen = parseInt(jQuery("#yourdivid").width,10);
var lablen =jQuery("#yourlabelid").text().length;
if(lablen < divlen){
jQuery("#yourlabelid").attr("title",jQuery("#yourlabelid").text());
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.