जटिल पीडीएफ दस्तावेजों के निर्माण के लिए मुद्रित तारों के लेआउट को निर्धारित करने के लिए मैं कई तरीकों का उपयोग कर रहा हूं IOS7 में बहिष्कृत किया गया है।आकार के लिए प्रतिस्थापन WithFont: ForWidth: lineBreakMode:
boundingRectWithSize:options:attributes:
कि sizeWithFont:ConstrainedTosize:lineBreakMode
के लिए ठीक है, लेकिन क्या हुआ अगर मैं केवल एक लाइन पर मेरी स्ट्रिंग हैं: प्रलेखन कि अनुचित हैं सब 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 पता नहीं है, या वास्तव में, एक पंक्ति के लिए ऊंचाई ठीक है कि मैं क्या पता लगाने के लिए कोशिश कर रहा हूँ?
मुझे लगता है कि वे एनएसएट्रिब्रिटेड तारों और ऑटो लेआउट के लिए संगतता की ओर क्यों दबाव डाल रहे हैं लेकिन इन्हें क्यों हटा दें? प्रतिस्थापन, मेरे मामले में, अब 4 या 5 कदम उठाता है जहां यह 1 या 2 होता है।
लाइन टी का उपयोग करके, टी टी द्वारा सुझाए गए फ़ॉन्ट की संपत्ति, मैंने इन विधियों को एक श्रेणी में बनाया जो मेरे लिए बहुत सरल बनाता है प्रतिस्थापन।
#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 देखें। –