เนื่องจากเราไม่สามารถใช้ sizeWithAttributes สำหรับ iOS ทั้งหมดที่มากกว่า 4.3 เราต้องเขียนโค้ดแบบมีเงื่อนไขสำหรับ 7.0 และ iOS ก่อนหน้า
1) โซลูชันที่ 1:
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
CGSize size = CGSizeMake(230,9999);
CGRect textRect = [specialityObj.name
boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont fontWithName:[AppHandlers zHandler].fontName size:14]}
context:nil];
total_height = total_height + textRect.size.height;
}
else {
CGSize maximumLabelSize = CGSizeMake(230,9999);
expectedLabelSize = [specialityObj.name sizeWithFont:[UIFont fontWithName:[AppHandlers zHandler].fontName size:14] constrainedToSize:maximumLabelSize lineBreakMode:UILineBreakModeWordWrap]; //iOS 6 and previous.
total_height = total_height + expectedLabelSize.height;
}
2) โซลูชัน 2
UILabel *gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16]; // Your Font-style whatever you want to use.
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];
ทางออกแรกคือบางครั้งไม่สามารถคืนค่าความสูงที่เหมาะสม ดังนั้นให้ใช้วิธีอื่น ซึ่งจะทำงานได้อย่างสมบูรณ์แบบ
ตัวเลือกที่สองค่อนข้างดีและทำงานได้อย่างราบรื่นใน iOS ทั้งหมดโดยไม่มีรหัสตามเงื่อนไข
-sizeWithAttributes:
วิธีการแทนคือ