programing

iOS 7에서 사용되지 않는 크기(WithFont:straintedToSize:lineBreakMode:)를 대체하시겠습니까?

bestprogram 2023. 6. 1. 23:01

iOS 7에서 사용되지 않는 크기(WithFont:straintedToSize:lineBreakMode:)를 대체하시겠습니까?

iOS 7에서 방법은 다음과 같습니다.

- (CGSize)sizeWithFont:(UIFont *)font
     constrainedToSize:(CGSize)size
         lineBreakMode:(NSLineBreakMode)lineBreakMode 

방법:

- (CGSize)sizeWithFont:(UIFont *)font

사용되지 않습니다.대체 방법

CGSize size = [string sizeWithFont:font
                 constrainedToSize:constrainSize
                     lineBreakMode:NSLineBreakByWordWrapping];

그리고:

CGSize size = [string sizeWithFont:font];

사용해 볼 수 있습니다.

CGRect textRect = [text boundingRectWithSize:size
                                 options:NSStringDrawingUsesLineFragmentOrigin
                              attributes:@{NSFontAttributeName:FONT}
                                 context:nil];

CGSize size = textRect.size;

"FONT"를 "[UIFont 글꼴..."로 변경하기만 하면 됩니다.]"

사이즈를 사용할 수 없기 때문에모든 iOS의 속성이 4.3보다 크면 7.0 및 이전 iOS에 대한 조건부 코드를 작성해야 합니다.

솔루션 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

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에서 원활하게 작동합니다.

간단한 솔루션은 다음과 같습니다.

요구 사항:

CGSize maximumSize = CGSizeMake(widthHere, MAXFLOAT);
UIFont *font = [UIFont systemFontOfSize:sizeHere];

나우 애즈constrainedToSizeusage:lineBreakMode:iOS 7.0에서는 사용이 더 이상 권장되지 않습니다.

CGSize expectedSize = [stringHere sizeWithFont:font constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping];

iOS 7.0 이상 버전에서는 다음과 같이 사용됩니다.

// Let's make an NSAttributedString first
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:stringHere];
//Add LineBreakMode
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
[paragraphStyle setLineBreakMode:NSLineBreakByWordWrapping];
[attributedString setAttributes:@{NSParagraphStyleAttributeName:paragraphStyle} range:NSMakeRange(0, attributedString.length)];
// Add Font
[attributedString setAttributes:@{NSFontAttributeName:font} range:NSMakeRange(0, attributedString.length)];

//Now let's make the Bounding Rect
CGSize expectedSize = [attributedString boundingRectWithSize:maximumSize options:NSStringDrawingUsesLineFragmentOrigin context:nil].size;

다음은 이 두 가지 사용되지 않는 방법을 대체할 두 가지 간단한 방법입니다.

다음은 관련 참고 자료입니다.

NSLineBreakByWordWraping을 사용하는 경우 NSParagraphStyle을 지정할 필요가 없습니다. 기본값은 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/index.html #//apple_ref/occ/clm/NSParagraphStyle/defaultParagterStyle입니다.

사용되지 않는 메소드의 결과와 일치하도록 크기의 천장을 얻어야 합니다.https://developer.apple.com/library/ios/documentation/UIKit/Reference/NSString_UIKit_Additions/ #//apple_ref/occ/instm/NSString/boundingRectWithSize: 옵션: 특성: 컨텍스트:

+ (CGSize)text:(NSString*)text sizeWithFont:(UIFont*)font {    
    CGSize size = [text sizeWithAttributes:@{NSFontAttributeName: font}];
    return CGSizeMake(ceilf(size.width), ceilf(size.height));
}

+ (CGSize)text:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size{
    CGRect textRect = [text boundingRectWithSize:size
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:@{NSFontAttributeName: font}
                                     context:nil];
    return CGSizeMake(ceilf(textRect.size.width), ceilf(textRect.size.height));
}

대부분의 경우 UIL 레이블이 텍스트를 수용할 수 있는 최소 크기를 추정하기 위해(특히 레이블을 UITableViewCell 내부에 배치해야 하는 경우) 방법 sizeWithFont:constrainedToSize:lineBreakMode:를 사용했습니다.

...이 상황이 정확하다면 다음 방법을 사용할 수 있습니다.

CGSize size = [myLabel textRectForBounds:myLabel.frame limitedToNumberOfLines:mylabel.numberOfLines].size;

이것이 도움이 되길 바랍니다.

UIFont *font = [UIFont boldSystemFontOfSize:16];
CGRect new = [string boundingRectWithSize:CGSizeMake(200, 300) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: font} context:nil];
CGSize stringSize= new.size;

[승인된 답변은 범주에서 잘 작동합니다.사용하지 않는 메서드 이름을 덮어씁니다.이것이 좋은 생각입니까?Xcode 6.x에서 불만 없이 작동하는 것 같습니다]

이는 배포 대상이 7.0 이상인 경우에 작동합니다.카테고리는NSString (Util)

NSString+Util.h

- (CGSize)sizeWithFont:(UIFont *) font;
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size;

NSString+Util.m

- (CGSize)sizeWithFont:(UIFont *) font {
    NSDictionary *fontAsAttributes = @{NSFontAttributeName:font};
    return [self sizeWithAttributes:fontAsAttributes];
}

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size {
    NSDictionary *fontAsAttributes = @{NSFontAttributeName:font};
    CGRect retVal = [self boundingRectWithSize:size
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:fontAsAttributes context:nil];
    return retVal.size;
}
UIFont *font = [UIFont fontWithName:@"Courier" size:16.0f];

NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
paragraphStyle.alignment = NSTextAlignmentRight;

NSDictionary *attributes = @{ NSFontAttributeName: font,
                    NSParagraphStyleAttributeName: paragraphStyle };

CGRect textRect = [text boundingRectWithSize:size
                                 options:NSStringDrawingUsesLineFragmentOrigin
                              attributes:attributes
                                 context:nil];

CGSize size = textRect.size;

의 답 중에서 1 + 2

언급URL : https://stackoverflow.com/questions/18903304/replacement-for-deprecated-sizewithfontconstrainedtosizelinebreakmode-in-ios