অবনমিত আকারের প্রতিস্থাপনের সাথে: আইওএস 7 এ?


320

আইওএস 7 এ, sizeWithFont:এখন অবচয় করা হয়েছে। আমি কীভাবে এখন ইউআইএফন্ট অবজেক্টে প্রতিস্থাপন পদ্ধতিতে পাস করব sizeWithAttributes:?

উত্তর:


521

sizeWithAttributes:পরিবর্তে ব্যবহার করুন, যা এখন একটি গ্রহণ করে NSDictionary। কী UITextAttributeFontএবং আপনার ফন্টের অবজেক্টটির সাথে জোড়াটি পাস করুন :

CGSize size = [string sizeWithAttributes:
    @{NSFontAttributeName: [UIFont systemFontOfSize:17.0f]}];

// Values are fractional -- you should take the ceilf to get equivalent values
CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));

60
যখন একটি সঙ্গে কাজ NSStringএবং UILabel(সব সময় নয় ক্ষেত্রে, কিন্তু প্রায়ই তাই), সদৃশ কোড / ইত্যাদি প্রতিরোধ, এছাড়াও আপনি প্রতিস্থাপন করতে পারেন [UIFont systemFontOfSize:17.0f]সঙ্গে label.font- বনাম আপনি বিদ্যমান তথ্য উল্লেখ এটা একাধিক বার টাইপ বা সব ধ্রুবক আখ্যা কোড রক্ষণাবেক্ষণ সাহায্য করে স্থান, ইত্যাদি
toblerpwn

8
@toblerpwn এটি সম্ভব লেবেলটির অস্তিত্ব নেই এবং আপনি একটি তাত্ত্বিক লেবেল গণনা করার চেষ্টা করছেন।
বটবট

5
এই লেবেলটির সাথে আকারের উচ্চতা পেতে আমি উদাহরণটি কীভাবে ব্যবহার করব উদাহরণস্বরূপ 250 এর একটি নির্দিষ্ট প্রস্থ পেয়েছে? বা যদি এর অটোলটাইআট ডাইনের সাথে একটি লেবেল প্রস্থের একটি প্রসেসেজ নেয় এবং আমি ল্যান্ডস্কেপেমোডে যাই।
পেড্রোইনপিস

12
@ পেড্রোইনপিস আপনি তার boundingRectWithSize:options:attributes:context:পরিবর্তে CGSizeMake(250.0f, CGFLOAT_MAX)বেশিরভাগ ক্ষেত্রেই ব্যবহার করবেন।
জেমস কুয়াং

9
আকার নোট করার জন্য অন্য কিছু যাচাই করুন: 100% সমতুল্য নয়। মাপের পূর্ণসংখ্যার (পিক্সেল) মানগুলিতে গোল করার জন্য আকারযুক্ত ফন্ট ব্যবহৃত হত। ফলস্বরূপ উচ্চতা / প্রস্থে সিল্ফ ব্যবহারের পরামর্শ দিন বা যদি আপনি অবস্থানগত গণনার জন্য এটি ব্যবহার করেন তবে আপনি অস্পষ্ট আর্টফ্যাক্টগুলি (এসএসএস নন রেটিনা এইচডাব্লুডু) পেতে পারেন।
নিক এইচ 247

172

আমি বিশ্বাস করি যে ফাংশনটি অবচিত করা হয়েছে কারণ সেই সিরিজের NSString+UIKitফাংশনগুলি ( sizewithFont:...ইত্যাদি) UIStringDrawingলাইব্রেরির উপর ভিত্তি করে ছিল, যা থ্রেডটি নিরাপদ ছিল না। যদি আপনি এগুলি মূল থ্রেডে না চালানোর চেষ্টা করেন (অন্য কোনও UIKitকার্যকারিতার মতো), আপনি অনির্দেশ্য আচরণ পাবেন। বিশেষত, আপনি যদি একসাথে একাধিক থ্রেডে ফাংশনটি চালিয়ে যান তবে এটি সম্ভবত আপনার অ্যাপ্লিকেশনটি ক্রাশ করবে। এই কারণেই আইওএস 6 এ তারা একটি boundingRectWithSize:...পদ্ধতি চালু করেছিল NSAttributedString। এটি NSStringDrawingলাইব্রেরির উপরে নির্মিত হয়েছিল এবং থ্রেড নিরাপদ।

আপনি যদি নতুন NSString boundingRectWithSize:...ফাংশনটি দেখুন তবে এটি একটি হিসাবে একই পদ্ধতিতে একটি বৈশিষ্ট্য অ্যারে জিজ্ঞাসা করবে NSAttributeString। যদি আমার অনুমান করতে হয়, NSStringআইওএস 7-এ এই নতুন ফাংশনটি NSAttributeStringআইওএস 6 থেকে ফাংশনটির জন্য কেবল একটি মোড়ক ।

যে নোট অন, আপনি শুধুমাত্র আইওএস 6 এবং আইওএস 7 সমর্থনকারী করা হয়েছে, অতঃপর আমি স্পষ্টভাবে আপনার সব পরিবর্তন হবে NSString sizeWithFont:...থেকে NSAttributeString boundingRectWithSize। যদি আপনি একটি অদ্ভুত মাল্টি-থ্রেডিং কর্নার কেস হয়ে থাকেন তবে এটি আপনার প্রচুর মাথা ব্যাথা বাঁচাবে! আমি কীভাবে রূপান্তর করেছি তা এখানে NSString sizeWithFont:constrainedToSize::

কি ব্যবহৃত হত:

NSString *text = ...;
CGFloat width = ...;
UIFont *font = ...;
CGSize size = [text sizeWithFont:font 
               constrainedToSize:(CGSize){width, CGFLOAT_MAX}];

এর সাথে প্রতিস্থাপন করা যেতে পারে:

NSString *text = ...;
CGFloat width = ...;
UIFont *font = ...;
NSAttributedString *attributedText =
    [[NSAttributedString alloc] initWithString:text 
                                    attributes:@{NSFontAttributeName: font}];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];
CGSize size = rect.size;

ডকুমেন্টেশন উল্লেখ নোট করুন:

আইওএস 7 এবং তারপরে, এই পদ্ধতিটি ভগ্নাংশের আকার দেয় (প্রত্যাবর্তনের আকারের উপাদানটিতে CGRect); আকারের আকারে কোনও প্রত্যাবর্তিত আকার ব্যবহার করতে, আপনাকে অবশ্যই সিল ফাংশনটি ব্যবহার করে নিকটতম উচ্চতর পূর্ণসংখ্যার কাছে এর মান বাড়াতে হবে।

আকারের আকারগুলি ব্যবহারের জন্য গণনা করা উচ্চতা বা প্রস্থটি টানতে আমি ব্যবহার করব:

CGFloat height = ceilf(size.height);
CGFloat width  = ceilf(size.width);

বাউন্ডিংরেক্টউইথসাইজ আইওএস .0.০ এ অবমুক্ত করা হয়েছে।
নীরভ

2
@ নীরভ আমি অবমূল্যায়নের কোনও উল্লেখ দেখতে পাচ্ছি না। আপনি কি আমাকে এটির দিকে নির্দেশ করতে পারেন যেখানে এটি বলে যে এটি অবনমিত হয়েছে? ধন্যবাদ! ( বিকাশকারী.অ্যাপল.
মিঃ টি

2
হয়তো @Nirav বোঝানো এটি জন্য উপলব্ধ ছিল না NSString আইওএস 6 (যা উত্তর পরোক্ষভাবে উল্লেখ করা হয়) নেই?
newenglander

1
@ ওয়েলজি এক্সপ্ল্যানেশন আমি কেবল এটি চেষ্টা করেছি এবং বাউন্ডিংআরেক্টফোর্সাইজ এখনও এনএসএট্রিবিউটেড স্ট্রিংয়ের জন্য অবহেলা করা হয়নি। এটি ডকুমেন্টেশনে অবচয় বলেও বলে না।
মিঃ টি

5
সিলফ () ব্যবহারের জন্য উল্লেখযোগ্য F আর কোথাও এটি উল্লেখ করা হয়নি এবং আমার আকার সর্বদা কিছুটা ছোট ছিল। ধন্যবাদ!
জোনাথন ব্রাউন

29

আপনি যেমন sizeWithFontঅ্যাপল বিকাশকারী সাইটে দেখতে পাচ্ছেন এটি হ্রাস পেয়েছে সুতরাং আমাদের ব্যবহার করা উচিত sizeWithAttributes

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

NSString *text = @"Hello iOS 7.0";
if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
    // code here for iOS 5.0,6.0 and so on
    CGSize fontSize = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" 
                                                         size:12]];
} else {
    // code here for iOS 7.0
   CGSize fontSize = [text sizeWithAttributes: 
                            @{NSFontAttributeName: 
                              [UIFont fontWithName:@"Helvetica" size:12]}];
}

17
এই ক্ষেত্রে ব্যবহার করা ভাল ইন [NSObject respondsToSelector:]: এখান মত পদ্ধতি stackoverflow.com/a/3863039/1226304
derpoliuk

16

আমি এই সমস্যাটি পরিচালনা করতে একটি বিভাগ তৈরি করেছি, এটি এখানে:

#import "NSString+StringSizeWithFont.h"

@implementation NSString (StringSizeWithFont)

- (CGSize) sizeWithMyFont:(UIFont *)fontToUse
{
    if ([self respondsToSelector:@selector(sizeWithAttributes:)])
    {
        NSDictionary* attribs = @{NSFontAttributeName:fontToUse};
        return ([self sizeWithAttributes:attribs]);
    }
    return ([self sizeWithFont:fontToUse]);
}

এইভাবে আপনাকে কেবল খুঁজে পেতে / প্রতিস্থাপন sizeWithFont:করতে হবে sizeWithMyFont:এবং আপনি যেতে ভাল good


1
যদিও এটি আকারের রেফারেন্সের জন্য ios7 + এ একটি সংকলক সতর্কতা বা <ios7 এ একটি সংকলন সতর্কতা / ত্রুটি << ios7 এ রেফারেন্সিং আকারের সাথে সংযুক্ত করবে! সম্ভবত প্রয়োজন হলে প্রতিক্রিয়াশক্তি নির্বাচন করার পরিবর্তে ম্যাক্রো ব্যবহার করা ভাল। তবে আপনি আর আইওএস SD এসডিকে দিয়ে আপেল বিতরণ করতে পারবেন না ... এটি সম্ভবত নয়!
নিক এইচ 247

সতর্কতাটিতে এই যুক্ত করুন # প্রগমা জিসিসি ডায়াগোনস্টিক উপেক্ষা করা হয়েছে "-বিহিত-বিবরণী"
রায়ান হিটনার

10

আইওএস 7-এ আমি টেবিল ভিউয়ের জন্য সঠিক উচ্চতা ফিরিয়ে আনার জন্য যুক্তিটির প্রয়োজন ছিল: উচ্চতারওআউটইন্ডেক্সপথ পদ্ধতিটি, তবে আকারের সাথে লেখাগুলি স্ট্রিং দৈর্ঘ্য নির্বিশেষে সর্বদা একই উচ্চতা ফেরত দেয় কারণ এটি জানে না যে এটি একটি নির্দিষ্ট প্রস্থের টেবিলের ঘরে স্থাপন করতে চলেছে । আমি এটি আমার জন্য দুর্দান্ত কাজ পেয়েছি এবং টেবিলের ঘরের প্রশস্ততা বিবেচনা করে সঠিক উচ্চতা গণনা করছি! এটি উপরের মিঃ টি এর উত্তরের ভিত্তিতে।

NSString *text = @"The text that I want to wrap in a table cell."

CGFloat width = tableView.frame.size.width - 15 - 30 - 15;  //tableView width - left border width - accessory indicator - right border width
UIFont *font = [UIFont systemFontOfSize:17];
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font}];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];
CGSize size = rect.size;
size.height = ceilf(size.height);
size.width  = ceilf(size.width);
return size.height + 15;  //Add a little more padding for big thumbs and the detailText label

7

ডায়নামিক উচ্চতা ব্যবহার করে মাল্টি-লাইন লেবেলগুলিকে আকারটি সঠিকভাবে সেট করতে অতিরিক্ত তথ্যের প্রয়োজন হতে পারে। আপনি উভয় ফন্ট এবং লাইন-ব্রেক মোড নির্দিষ্ট করতে UIFont এবং NSParaographicStyle এর সাথে আকারেরঅ্যাট্রিবিউট ব্যবহার করতে পারেন।

আপনি অনুচ্ছেদের স্টাইলটি সংজ্ঞায়িত করবেন এবং এনএসডিকোরিয়ানের মতো ব্যবহার করুন:

// set paragraph style
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setLineBreakMode:NSLineBreakByWordWrapping];
// make dictionary of attributes with paragraph style
NSDictionary *sizeAttributes        = @{NSFontAttributeName:myLabel.font, NSParagraphStyleAttributeName: style};
// get the CGSize
CGSize adjustedSize = CGSizeMake(label.frame.size.width, CGFLOAT_MAX);

// alternatively you can also get a CGRect to determine height
CGRect rect = [myLabel.text boundingRectWithSize:adjustedSize
                                                         options:NSStringDrawingUsesLineFragmentOrigin
                                                      attributes:sizeAttributes
                                                         context:nil];

আপনি যদি উচ্চতার সন্ধান করেন তবে আপনি সিজি সাইজ 'অ্যাডজাস্টেড সাইজ' বা সিজিআরেক্টটিকে rect.size.height সম্পত্তি হিসাবে ব্যবহার করতে পারেন।

এনএসপারাগ্রাফ স্টাইল সম্পর্কে আরও তথ্য এখানে: https://developer.apple.com/library/mac/docamentation/cocoa/references/applicationkit/classes/NSParaographicStyle_Class/References/References.html


1
দেখে মনে হচ্ছে অ্যাডজাস্টসাইজের সাথে সাথেই সিন্টেক্সের সমস্যা আছে।
ক্রিস প্রিন্স 21

সেই সিনট্যাক্স ইস্যুটি ধরার জন্য ধন্যবাদ, ক্রিস
বিটস্যান্ড এবং

6
// max size constraint
CGSize maximumLabelSize = CGSizeMake(184, FLT_MAX)

// font
UIFont *font = [UIFont fontWithName:TRADE_GOTHIC_REGULAR size:20.0f];

// set paragraph style
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;

// dictionary of attributes
NSDictionary *attributes = @{NSFontAttributeName:font,
                             NSParagraphStyleAttributeName: paragraphStyle.copy};

CGRect textRect = [string boundingRectWithSize: maximumLabelSize
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:attributes
                                     context:nil];

CGSize expectedLabelSize = CGSizeMake(ceil(textRect.size.width), ceil(textRect.size.height));

1
এটি আমার মাথা ব্যথার কয়েক ঘন্টা বাঁচিয়েছিল, কিরীটকে ধন্যবাদ জানায়, সিজিআরেক্ট ব্লকের আগে বৈশিষ্ট্য এবং অভিধানগুলি সংজ্ঞায়িত করে আমার জন্য এটি কী করেছিল ... পড়তে খুব সহজ হয়েছিল।
আজিন মেহরনূশ

3

এমন একটি ফাংশন তৈরি করুন যা কোনও ইউআইএলবেল উদাহরণ গ্রহণ করে। এবং CGSize প্রদান করে

CGSize constraint = CGSizeMake(label.frame.size.width , 2000.0);
// Adjust according to requirement

CGSize size;
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0){

    NSRange range = NSMakeRange(0, [label.attributedText length]);

    NSDictionary *attributes = [label.attributedText attributesAtIndex:0 effectiveRange:&range];
    CGSize boundingBox = [label.text boundingRectWithSize:constraint options: NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;

    size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));
}
else{
    size = [label.text sizeWithFont:label.font constrainedToSize:constraint lineBreakMode:label.lineBreakMode];
}

return size;

ডায়নামিকালি সারি উচ্চতার জন্য আমি আমার কেস আমি সম্পূর্ণরূপে হাইটফোরআর পদ্ধতিটি সরিয়ে এবং ইউআইটিএবলভিউআউটমেটিক মাত্রা ব্যবহার করেছি। tableView.estimatedRowHeight = 68.0 tableView.rowHeight = UITableViewAutomaticDimension
ইউজিন ব্রাগিনেটস 13

3

বিকল্প সমাধান-

CGSize expectedLabelSize;
if ([subTitle respondsToSelector:@selector(sizeWithAttributes:)])
{
    expectedLabelSize = [subTitle sizeWithAttributes:@{NSFontAttributeName:subTitleLabel.font}];
}else{
    expectedLabelSize = [subTitle sizeWithFont:subTitleLabel.font constrainedToSize:subTitleLabel.frame.size lineBreakMode:NSLineBreakByWordWrapping];
}

1
এটি আইওএস 6 এবং 7 উভয়ের জন্য একটি সংকলক সতর্কতা তৈরি করবে এবং এর প্রতিটিটির জন্য বেশ আলাদা আচরণ থাকবে!
নিক এইচ 247

3

@ বিটস এন্ড বিল্ডিং, এটি একটি নতুন পদ্ধতি যা আমি স্রেফ আমার এনএসএসটিং + অতিরিক্ত বিভাগে যুক্ত করেছি:

- (CGRect) boundingRectWithFont:(UIFont *) font constrainedToSize:(CGSize) constraintSize lineBreakMode:(NSLineBreakMode) lineBreakMode;
{
    // set paragraph style
    NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    [style setLineBreakMode:lineBreakMode];

    // make dictionary of attributes with paragraph style
    NSDictionary *sizeAttributes = @{NSFontAttributeName:font, NSParagraphStyleAttributeName: style};

    CGRect frame = [self boundingRectWithSize:constraintSize options:NSStringDrawingUsesLineFragmentOrigin attributes:sizeAttributes context:nil];

    /*
    // OLD
    CGSize stringSize = [self sizeWithFont:font
                              constrainedToSize:constraintSize
                                  lineBreakMode:lineBreakMode];
    // OLD
    */

    return frame;
}

আমি কেবল ফলাফল ফ্রেমের আকার ব্যবহার করি use


2

আপনি এখনও ব্যবহার করতে পারেন sizeWithFont। তবে, আইওএস> = 7.0 পদ্ধতিতে ক্র্যাশ হওয়ার কারণ যদি স্ট্রিংটিতে শীর্ষস্থানীয় এবং পিছনের জায়গাগুলি বা শেষ লাইন থাকে \n

এটি ব্যবহার করার আগে পাঠ্য ছাঁটাই করা

label.text = [label.text stringByTrimmingCharactersInSet:
             [NSCharacterSet whitespaceAndNewlineCharacterSet]];

এটিও প্রয়োগ হতে পারে sizeWithAttributesএবং [label sizeToFit]

এছাড়াও, আপনি যখনই nsstringdrawingtextstorage message sent to deallocated instanceআইওএস 7.0 ডিভাইসে থাকবেন তখন এটি এটির সাথে ডিল করে।


2

আরও ভাল ব্যবহার স্বয়ংক্রিয় মাত্রা (সুইফ্ট):

  tableView.estimatedRowHeight = 68.0
  tableView.rowHeight = UITableViewAutomaticDimension

এনবি: ১. ইউআইটিএবলভিউসেল প্রোটোটাইপটি সঠিকভাবে ডিজাইন করা উচিত (উদাহরণস্বরূপ UILabel.numberOfLines = 0 ইত্যাদি সেট করতে ভুলবেন না) 2. হাইটফোরআরোএটিডেক্সপথ পদ্ধতিটি সরান

এখানে চিত্র বর্ণনা লিখুন

ভিডিও: https://youtu.be/Sz3XfCsSb6k


স্ট্যাটিবোর্ড প্রোটোটাইপ সেলে সংজ্ঞায়িত স্থিতিশীল কক্ষের উচ্চতা নেওয়া
কিরীট ওয়াঘেলা

এই দুটি লাইন যুক্ত হয়েছে এবং আমার ইউআইএলবেল 0 টি লাইনে সেট করা আছে তা নিশ্চিত করেছেন। বিজ্ঞাপন হিসাবে কাজ করেন নি। কোডটি কেবলমাত্র এই দুটি লাইনের সাথে এটি কাজ করতে আপনি আর কী করেছিলেন?
উইল

1
এইচএম, এছাড়াও আপনাকে নিজের লেবেলের সীমাবদ্ধতার উপরের ঘরের উপরে এবং নীচে পিন করতে হবে
ইউজিন ব্রাজিনিটস

1
না, এটি যথেষ্ট হওয়া উচিত। আপনার কাছে কি তদারকিতে লেবেল লাগানোর জন্য অটোলেআউট সীমাবদ্ধতা রয়েছে?
ইউজিন ব্রাজিনিটস



1

@ আয়ুষ উত্তর হিসাবে:

আপনি যেমন sizeWithFontঅ্যাপল বিকাশকারী সাইটে দেখতে পাচ্ছেন এটি হ্রাস পেয়েছে সুতরাং আমাদের ব্যবহার করা উচিত sizeWithAttributes

ঠিক আছে, ধরুন যে 2019+ এ আপনি সম্ভবত সুইফট ব্যবহার করছেন এবং Stringঅবজেক্টিভ-সি এর পরিবর্তে এবং NSStringএখানে সঠিক উপায়ে Stringপূর্বনির্ধারিত ফন্টের আকারের আকার পাবেন :

let stringSize = NSString(string: label.text!).size(withAttributes: [.font : UIFont(name: "OpenSans-Regular", size: 15)!])

হরফ আকার নির্ধারণ করতে আপনি এটি কীভাবে ব্যবহার করতে পারেন?
জোসেফ আস্ট্রাহান

@ জোসেফআস্ট্রাহান এটি হরফ আকার নির্ধারণের জন্য নয়, এটি নির্ধারিত ফন্টের সাথে একটি স্ট্রিংয়ের আকার (সিজি সাইজ) পাওয়ার জন্য। আপনি যদি কোনও লেবেলের ফন্টের আকার পেতে চান তবে আপনি সহজেই লেবেল.ফন্ট ব্যবহার করতে পারেন
বিএম

আপনার ধারণাটি ব্যবহার করে, আমি ফন্টের আকার কমবেশি পাওয়ার জন্য একটি উপায় তৈরি করেছি ( স্ট্যাকওভারফ্লো / প্রশ্ন / 65১6565১16১14১/২ ), label.font would would লেবেল শুধুমাত্র যদি ক্লিক করার যোগ্য হচ্ছে আমার ক্ষেত্রে কিছু জটিল সমস্যার কারণে কাজ না সঠিক ফন্টটি জানা যায় আপনি আমার পোস্টে এটি সম্পর্কে পড়তে পারেন।
জোসেফ আস্ট্রাহান


0

যদি কারও এটির প্রয়োজন হয় তবে মনোোটুচ সমতুল্য:

/// <summary>
/// Measures the height of the string for the given width.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="font">The font.</param>
/// <param name="width">The width.</param>
/// <param name="padding">The padding.</param>
/// <returns></returns>
public static float MeasureStringHeightForWidth(this string text, UIFont font, float width, float padding = 20)
{
    NSAttributedString attributedString = new NSAttributedString(text, new UIStringAttributes() { Font = font });
    RectangleF rect = attributedString.GetBoundingRect(new SizeF(width, float.MaxValue), NSStringDrawingOptions.UsesLineFragmentOrigin, null);
    return rect.Height + padding;
}

যা এটির মতো ব্যবহার করা যেতে পারে:

public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
    //Elements is a string array
    return Elements[indexPath.Row].MeasureStringHeightForWidth(UIFont.SystemFontOfSize(UIFont.LabelFontSize), tableView.Frame.Size.Width - 15 - 30 - 15);
}

0
CGSize maximumLabelSize = CGSizeMake(label.frame.size.width, FLT_MAX);
CGSize expectedLabelSize = [label sizeThatFits:maximumLabelSize];
float heightUse = expectedLabelSize.height;


-1

আইওএস this এ এর ​​কোনওটিই আমার পক্ষে কাজ করেনি Here আমি এটিকে আমার কাস্টম সেল শ্রেণিতে রেখেছি এবং আমার উচ্চতাের জন্য কলটিঅ্যাক্টেক্সেক্স পদ্ধতিতে call

অ্যাপ স্টোরটিতে একটি অ্যাপ্লিকেশন দেখার সময় আমার ঘর বিবরণ কলের মতো দেখায়।

স্টোরিবোর্ডে প্রথমে আপনার লেবেলটিকে 'অ্যাট্রিবিউটটেক্সট' তে সেট করুন, লাইনের সংখ্যা 0 তে সেট করুন (যা স্বয়ংক্রিয়ভাবে লেবেলের আকার পরিবর্তন করবে (কেবলমাত্র আইওএস 6+) এবং ওয়ার্ড র‌্যাপে সেট করবে।

তারপরে আমি কেবলমাত্র আমার কাস্টম সেল শ্রেণিতে কক্ষের সামগ্রীর সমস্ত উচ্চতা যুক্ত করেছি। আমার ক্ষেত্রে আমার শীর্ষে একটি লেবেল রয়েছে যা সর্বদা "বিবরণ" (_ডেস্ক্রিপশন হিডিংলাবেল) বলে, এটি একটি ছোট লেবেল যা আকারে পরিবর্তনশীল যা আসল বিবরণ (_ডেস্ক্রিপশন লেবেল) কক্ষের শীর্ষ থেকে শিরোনাম (_descriptHeadingLabelTopConstraint) পর্যন্ত একটি সীমাবদ্ধ থাকে । আমি নীচে সামান্য কিছুটা জায়গা জুড়েছি (সাবটাইটেল টাইপ কোষে সমান পরিমাণ অ্যাপল জায়গাগুলি))

- (CGFloat)calculateHeight
{
    CGFloat width = _descriptionLabel.frame.size.width;
    NSAttributedString *attributedText = _descriptionLabel.attributedText;
    CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX} options: NSStringDrawingUsesLineFragmentOrigin context:nil];

    return rect.size.height + _descriptionHeadingLabel.frame.size.height + _descriptionHeadingLabelTopConstraint.constant + 3;
}

এবং আমার টেবিল ভিউ প্রতিনিধিতে:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    if (indexPath.row == 0) {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"descriptionCell"];
        DescriptionCell *descriptionCell = (DescriptionCell *)cell;
        NSString *text = [_event objectForKey:@"description"];
        descriptionCell.descriptionLabel.text = text;

        return [descriptionCell calculateHeight];
    }

    return 44.0f;
}

আপনি যদি বিবৃতিটিকে কিছুটা 'স্মার্ট' হিসাবে পরিবর্তন করতে পারেন এবং প্রকৃতপক্ষে কোনও ধরণের ডেটা উত্স থেকে সেল সনাক্তকারী পান। আমার ক্ষেত্রে কক্ষগুলি হার্ড কোডিং হতে চলেছে কারণ সেগুলির একটি নির্দিষ্ট ক্রমে নির্দিষ্ট পরিমাণ থাকবে।


boundingRectWithSizeআইওএস 9.2 বর্তমান সমস্যার মধ্যে আইওএস <9.2 এর বিভিন্ন ফলাফল। এটি তৈরি করার জন্য আপনি অন্য কোনও সেরা উপায় খুঁজে পেয়েছেন বা জানেন।
jose920405
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.