複雑な PDF ドキュメントを作成するために印刷文字列のレイアウトを決定するために私が使用していた方法の多くは、iOS7 で廃止されました。ドキュメントでは、推奨されないすべての sizeWithFont メソッドの代わりとして使用する同じメソッドを呼び出します。
boundingRectWithSize:options:attributes:
それは問題ありsizeWithFont:ConstrainedTosize:lineBreakMode
ませんが、文字列を1行だけにしたい場合はどうすればよいですか? 最大高さに何を使用すればよいかわからないため、最初のパラメーターの値として渡す四角形がありません。
これは、特定のサイズに制限するときに私が持っているものです。
CGFloat maxHeightAllowable = _maxHeight;
CGSize issueTitleMaxSize = CGSizeMake(_issueListTitleColWidth - (kColumnMargin *2), maxHeightAllowable);
NSDictionary *issueTitleAttributes = [NSDictionary dictionaryWithObjectsAndKeys:_bodyFont, NSFontAttributeName, nil];
CGRect issueTitleRect = CGRectIntegral([issueTitleText boundingRectWithSize:issueTitleMaxSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:issueTitleAttributes context:nil]);
CGSize issueTitleSize = issueTitleRect.size;
maxHeight がわからない場合、または実際には 1 行の高さがまさに私が見つけようとしているものである場合、この同じ方法をどのように使用しますか?
彼らが NSAttributed 文字列と自動レイアウトの互換性を推進している理由はわかりますが、なぜこれらを非推奨にするのですか? 私の場合、交換には、以前は 1 または 2 だったステップが 4 または 5 ステップになりました。
T氏が提案したように、フォントのlineHeightプロパティを使用して、これらのメソッドを置き換えを大幅に簡素化するカテゴリにしました。
#import "NSString+SizingForPDF.h"
@implementation NSString (SizingForPDF)
-(CGSize)integralSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)maxSize
{
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
CGRect rect = CGRectIntegral([self boundingRectWithSize:maxSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil]);
return rect.size;
}
-(CGSize)integralSizeWithFont:(UIFont *)font maxWidth:(CGFloat)maxWidth numberOfLines:(NSInteger)lines
{
if (lines == 0) {
lines = 1;
}
NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
CGFloat height = font.lineHeight * lines;
CGSize maxsize = CGSizeMake(maxWidth, height);
CGRect rect = CGRectIntegral([self boundingRectWithSize:maxsize options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesFontLeading attributes:attributes context:nil]);
return rect.size;
}
@end