반응형
iOS 7 사이즈속성 포함: sizeWithFont: 제약된 ToSize에 대한 대체
새로운 iOS 7 메소드 크기에서 여러 줄 텍스트 CG 크기를 반환하는 방법속성 포함?
저는 이것이 sizeWithFont:constraintedToSize와 동일한 결과를 만들어내기를 원합니다.
NSString *text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus eu urna quis lacus imperdiet scelerisque a nec neque. Mauris eget feugiat augue, vitae porttitor mi. Curabitur vitae sollicitudin augue. Donec id sapien eros. Proin consequat tellus in vehicula sagittis. Morbi sed felis a nibh hendrerit hendrerit. Lorem ipsum dolor sit."
CGSize textSize = [text sizeWithAttributes:@{ NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:16.0] }];
이 방법은 텍스트 한 줄에 대한 높이만 생성합니다.
음 당신은 이것을 시도할 수 있습니다:
NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14]};
// NSString class method: boundingRectWithSize:options:attributes:context is
// available only on ios7.0 sdk.
CGRect rect = [textToMeasure boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
제가 한 일은 다음과 같습니다.
// Get a font to draw it in
UIFont *font = [UIFont boldSystemFontOfSize: 28];
CGRect textRect;
NSDictionary *attributes = @{NSFontAttributeName: font};
// How big is this string when drawn in this font?
textRect.size = [text sizeWithAttributes:attributes];
// Draw the string
[text drawInRect:textRect withAttributes:attributes];
두 가지 상황을 모두 처리하는 방법은 다음과 같습니다.NSString
카테고리.
- (CGSize) sizeWithFontOrAttributes:(UIFont *) font {
if (IS_IOS7) {
NSDictionary *fontWithAttributes = @{NSFontAttributeName:font};
return [self sizeWithAttributes:fontWithAttributes];
} else {
return [self sizeWithFont:font];
}
}
사마린.i.OS:
UIFont descriptionLabelFont = UIFont.SystemFontOfSize (11);
NSString textToMeasure = (NSString)DescriptionLabel.Text;
CGRect labelRect = textToMeasure.GetBoundingRect (
new CGSize(this.Frame.Width, nfloat.MaxValue),
NSStringDrawingOptions.UsesLineFragmentOrigin,
new UIStringAttributes () { Font = descriptionLabelFont },
new NSStringDrawingContext ()
);
Swift 2.3:
let attributes = [NSFontAttributeName:UIFont(name: "HelveticaNeue", size: 14)]
let rect = NSString(string: textToMeasure).boundingRectWithSize(
CGSizeMake(width, CGFLOAT_MAX),
options: NSStringDrawingOptions.UsesLineFragmentOrigin,
attributes: attributes, context: nil)
스위프트 4:
let attributes = [NSFontAttributeName:UIFont(name: "HelveticaNeue", size: 14)]
let rect = NSString(string: textToMeasure).boundingRect(
with: CGSize(width: width, height: CGFloat.greatestFiniteMagnitude),
options: NSStringDrawingOptions.usesLineFragmentOrigin,
attributes: attributes as [NSAttributedString.Key : Any], context: nil)
레이블 세트의 텍스트, 글꼴, numberOfLines 및 너비가 있는 경우 이 메서드는 레이블 크기를 반환합니다.
myLabel.numberOfLines = 0;
CGSize size = [myLabel sizeThatFits:CGSizeMake(myLabel.frame.size.width, CGFLOAT_MAX)];`
대안으로, 만약 당신이 보고 있다면.UITextView
당신은 언제든지 사용할 수 있습니다.NSLayoutManager
방법:
CGSize textSize = [textView.layoutManager usedRectForTextContainer:textView.textContainer].size;
또한 다음을 통해 지정된 글꼴의 선 높이를 찾을 수 있습니다.
UIFont *font;
CGFloat lineHeight = font.lineHeight;
[새로운 사용자로서, 저는 @testing의 답변에 댓글을 달 수는 없지만, 그의 답변(xamarin.ios의 경우)을 더 유용하게 만들기 위해]
우리는 CGRect를 반환하고 UIButton 등을 대상으로 하는 gui 항목에 대해서만 높이 매개변수를 사용할 수 있습니다.아래와 같이 우리가 필요로 하는 매개 변수
public CGRect GetRectForString(String strMeasure, int fontSize, nfloat guiItemWidth)
{
UIFont descriptionLabelFont = UIFont.SystemFontOfSize (fontSize);
NSString textToMeasure = (NSString)strMeasure;
CGRect labelRect = textToMeasure.GetBoundingRect (
new CGSize(guiItemWidth, nfloat.MaxValue),
NSStringDrawingOptions.UsesLineFragmentOrigin,
new UIStringAttributes () { Font = descriptionLabelFont },
new NSStringDrawingContext ()
);
return labelRect;
}
header_Revision.Frame = new CGRect (5
, verticalAdjust
, View.Frame.Width-10
, GetRectForString( header_Revision.Title(UIControlState.Normal)
, 18
, View.Frame.Width-10 ).Height
);
CGSize stringsize = [lbl.text sizeWithAttributes:
@{NSFontAttributeName:[UIFont fontWithName:FontProximaNovaRegular size:12.0]}];
CGSize adjustedSize = CGSizeMake(ceilf(stringsize.width), ceilf(stringsize.height));
사용하다ceilf
적절하게 관리하는 방법
언급URL : https://stackoverflow.com/questions/19145078/ios-7-sizewithattributes-replacement-for-sizewithfontconstrainedtosize
반응형
'programing' 카테고리의 다른 글
텍스트 보기에서 텍스트를 가로 및 세로로 중앙에 배치하려면 어떻게 해야 합니까? (0) | 2023.06.03 |
---|---|
응용 프로그램의 시작 활동 변경 (0) | 2023.06.03 |
Tomcat 8.5.x 및 TomEE 7.x를 이클립스와 함께 사용하는 방법은 무엇입니까? (0) | 2023.06.03 |
디스플레이: 인라인과 디스플레이: 인라인 블록의 차이점은 무엇입니까? (0) | 2023.06.03 |
C#의 모든 열거값을 순환하는 방법은 무엇입니까? (0) | 2023.06.03 |