複雑なpdfドキュメントを作成するために印刷された文字列のレイアウトを決定するために使用していた方法の多くは、iOS7では廃止されました。 sizeWithFont:ConstrainedTosize:lineBreakMode
の罰金ですが、私は唯一の1本のライン上の私の文字列が何をしたい場合sizeWithFontの代わりに:ForWidth:lineBreakMode:
boundingRectWithSize:options:attributes:
:ドキュメントは廃止されているすべてのsizeWithFont法の代替として使用するために、同じ方法を呼び出しますか?私は最大の高さに何を使うべきかわからないので、最初のパラメータの値として引き渡す矩形はありません。
これは、指定されたサイズに制限するときのものです。
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さんが示唆しているように、fontのlineHeightプロパティを使用して、これらのメソッドを大幅に単純化置換。あなただけの1行の高さを探している場合
#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
あなたの方法は、唯一私がクランプするCGRectIntegralマクロを使用し、ほとんどの鉱山と同じです値は整数になります。私は、行の高さのフォントを見ることは決して考えなかった。それが私の答えでした。私は以前のコードをより簡単に置き換えることができるようなカテゴリの新しいメソッドをいくつか作成しました。 –
LineBreakModeはNSParagraphStyle属性で置き換えられ、属性辞書に追加できます。これを行う方法の詳細な例は、http://stackoverflow.com/a/26894770/338468を参照してください。 –