ios आईओएस 6 में दी गई चौड़ाई के साथ एनएसएट्रिब्यूटेड स्ट्रिंग की ऊंचाई की गणना कैसे करें



nsattributedstring bounding-box (1)

संभावित डुप्लिकेट:
एक निश्चित चौड़ाई पर NSAttributedString के लिए ऊंचाई कैसे प्राप्त करें

अब NSAttributedString आईओएस 6 में उपलब्ध है। लेआउट उद्देश्यों के लिए, मैं जानना चाहता हूं कि निश्चित चौड़ाई के तहत एनएसएट्रिब्यूटेड स्ट्रिंग की आवश्यक ऊंचाई की गणना कैसे करें। मैं कुछ ऐसा ढूंढ रहा हूं जो - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size के बराबर है - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size लेकिन NSAttributedString के लिए।

NSAttributedStrings के ड्राइंग आकार की गणना करने के लिए, दो विधियां उपलब्ध हैं:

  1. - (CGSize)size उपयोग नहीं किया जा सकता है क्योंकि यह किसी भी चौड़ाई को ध्यान में नहीं लेता है।
  2. मैंने कोशिश की - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context , लेकिन किसी भी तरह से यह मुझे सही ऊंचाई नहीं देता है। मुझे लगता है कि विधि छोटी है। यदि मैं निम्नलिखित कोड चलाता हूं, तो यह मुझे bounding size: 572.324951, 19.000000 देता है bounding size: 572.324951, 19.000000 200 की दी गई चौड़ाई को अनदेखा कर रहा है। मुझे मुझे 100 ऊंचाई की तरह कुछ देना चाहिए।
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init];
    NSDictionary *attributes = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:15], NSForegroundColorAttributeName : [UIColor blueColor]};
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" attributes:attributes]];
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" attributes:attributes]];
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" attributes:attributes]];
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" attributes:attributes]];
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" attributes:attributes]];

    CGRect frame = [attributedString boundingRectWithSize:CGSizeMake(200, 1000) options:0 context:nil];
    NSLog(@"bounding size: %f, %f", frame.size.width, frame.size.height);

मैक ओएस एक्स के लिए अन्य विधियां उपलब्ध हैं, लेकिन आईओएस के लिए नहीं।


विकल्प 2 उचित पैरामीटर के साथ आईओएस में काम करता है।

NSAttributedString *attrStr = ... // your attributed string
CGFloat width = 300; // whatever your desired width is
CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];

options पैरामीटर के उचित मूल्यों के बिना आपको गलत ऊंचाई मिल जाएगी।

यह भी आवश्यक है कि attrStr में एक फ़ॉन्ट विशेषता है। फ़ॉन्ट के बिना, आकार की उचित गणना करने का कोई तरीका नहीं है।





bounding-box