Birçok -iOS7 onaylanmaz. sizeWithFont:ConstrainedTosize:lineBreakMode
için iyi ama ben sadece bir satırda benim dize neyi istiyorsanızYedek lineBreakMode: Karmaşık pdf dokümanların oluşturulması için baskılı dizeleri düzenini belirlemek için kullandığımız olmuştu yöntemlerden
boundingRectWithSize:options:attributes:
: Belgeler kaldırılmış olan tüm sizeWithFont yöntemler için yedek olarak kullanmak üzere aynı yöntemi sesleniyor? Maksimum yükseklik için ne kullanacağımı bilmiyorum, bu yüzden ilk parametre için bir değer olarak teslim edilmemem gerekiyor. İşte
verilen bir boyuta sınırlama zaman ne var.
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;
Ben maxHeight bilmiyorum ya aslında bir hat için yükseklik Bulmaya çalışıyorum tam olarak ne ben bu aynı yöntemi kullanırsınız nasıl
?
onlar NSAttributed dizeleri ve oto düzeni için uyumluluk doğru iterek ama neden bu kullanımdan kaldırmak neden anlıyorum? Benim durumumda, şimdi, 1 veya 2 olduğu yerde 4 veya 5 adımı alır.
Bay T'nin önerdiği şekilde fontun lineHeight özelliğini kullanarak, bu yöntemleri çok basitleştiren bir kategoride yaptım. değiştirme.
#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
Yöntemin hemen hemen benimkiyle aynı, sadece ben kelepçe CGRectIntegral makro kullanmak tamsayılar için değerler. Çizgi yüksekliği için yazıya bakmayı hiç düşünmemiştim. Benim için cevap buydu. Eski kodumu daha kolay bir şekilde değiştiren bir kategoride birkaç yeni yöntem yapmak için kullandım. –
LineBreakMode, öznitelikler sözlüğüne eklenebilecek bir NSParagraphStyle özniteliğiyle değiştirilir. Bunun nasıl yapılacağına dair ayrıntılı bir örnek için http://stackoverflow.com/a/26894770/338468 adresine bakın. –