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;
언급URL : https://stackoverflow.com/questions/18903304/replacement-for-deprecated-sizewithfontconstrainedtosizelinebreakmode-in-ios
'programing' 카테고리의 다른 글
엑셀에서 셀을 KB, MB, GB 등으로 포맷하려면 어떻게 해야 합니까? (0) | 2023.06.01 |
---|---|
삽입 시간별로 유성 컬렉션을 정렬하려면 어떻게 해야 합니까? (0) | 2023.06.01 |
erb의 의미는 무엇입니까? (0) | 2023.06.01 |
열거형 명명 규칙 - 복수 (0) | 2023.05.27 |
가져오기 오류: 'encodings'라는 이름의 모듈이 없습니다. (0) | 2023.05.27 |