2013-09-23 8 views
18

मैं नया पाठ किट एपीआई का उपयोग कर रहा हूँ कुछ जिम्मेदार ठहराया पाठ करने के लिए अटैचमेंट नहीं जोड़:आईओएस 7 टेक्स्ट किट का उपयोग करके अनुलग्नकों के चारों ओर पाठ कैसे लपेटें?

// create an attachment for each image 
NSTextAttachment* ta = [NSTextAttachment new]; 
ta.image = [UIImage imageNamed:@"imageName"]; 

// add to the attributed text string 
NSAttributedString* rep = [NSAttributedString attributedStringWithAttachment:ta]; 
[myAttributedTextString appendAttributedString:rep]; 

यह ठीक काम करता है, मैं मेरी छवि को उत्पादन में गाया देख सकते हैं। हालांकि, मुझे छवि संरेखण निर्दिष्ट करने या छवि के चारों ओर पाठ लपेटने का कोई तरीका नहीं मिल रहा है।

कोई विचार?

नोट: पाठ संलग्नक बहिष्करण रास्तों से अलग हैं - एक पाठ लगाव 'मॉडल' है, यानी यह जिम्मेदार ठहराया पाठ स्ट्रिंग है कि लेआउट प्रबंधक पर पाठ लेआउट प्रदर्शन का हिस्सा है का हिस्सा है। जबकि एक बहिष्करण पथ दृश्य का हिस्सा है।

उत्तर

20

NSTextAttachmentsNSAttributedString द्वारा एक भी चरित्र के रूप में माना जाता है। इसलिए, उनके संरेखण को समायोजित करने के लिए आपको टेक्स्ट के लिए ऐसा करना होगा। अंततः इसे समझने के लिए मुझे attachment.bounds (जिसे मैं ठीक से काम नहीं कर सका) के साथ झुकाव के घंटों लगा। NSTextAttachment क्षैतिज रूप से संरेखित करने का उदाहरण यहां दिया गया है।

#def BETWEEN_SECTION_SPACING 10 

// creates a text attachment with an image 

NSTextAttachment *attachment = [[NSTextAttachment alloc] init]; 

attachment.image = [UIImage imageNamed:@"sample_image.jpg"]; 

NSMutableAttributedString *imageAttrString = [[NSAttributedString attributedStringWithAttachment:attachment] mutableCopy]; 



// sets the paragraph styling of the text attachment 

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init] ; 

[paragraphStyle setAlignment:NSTextAlignmentCenter];   // centers image horizontally 

[paragraphStyle setParagraphSpacing:BETWEEN_SECTION_SPACING]; // adds some padding between the image and the following section 

[imageAttrString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [imageAttrString length])]; 

इस के बाद, आप एक मौजूदा जिम्मेदार ठहराया स्ट्रिंग के लिए imageAttrString संलग्न करेंगे और शायद यह के बाद एक और जोड़ देते हैं। एक quirk यह है कि लगाव एक चरित्र है क्योंकि इसे अपने अनुच्छेद के रूप में नहीं माना जाता है। इस मामले के लिए आपको \n (न्यूलाइन वर्ण) के साथ घूमने की आवश्यकता होगी। बस संलग्नक की जिम्मेदार स्ट्रिंग के दोनों किनारों पर इन्हें जोड़ दें।

आशा है कि मदद करता है, मुझे समझने में उम्र लग गई।

+0

यह बहुत उपयोगी है। साझा करने के लिए धन्यवाद! – CodePlumber

10

छवि आकार में bounds संपत्ति सेट करने का प्रयास करें।

टेक्स्ट समन्वय प्रणाली में रिसीवर के ग्राफिकल प्रतिनिधित्व के लेआउट सीमाओं को परिभाषित करता है।

तो यह होना चाहिए:

ta.bounds = (CGRect) { 0, 0, ta.image.size }; 
+1

ओउहो, अच्छा! अंततः मुझे अपनी छवियों को लंबवत स्थिति में रखने की अनुमति देता है। – DarkDust

+0

यह काम करता है! यह सबसे अच्छा जवाब के रूप में स्वीकार किया जाना चाहिए। सरल और सीधे – Songlin

1
ta.bounds = (CGRect) { 0, yPadding, ta.image.size }; 

आपको आवश्यक वाई-पैडिंग बदलें।
यह नकारात्मक हो सकता है जब छवि की ऊंचाई रेखा ऊंचाई से बड़ी होती है।

संबंधित मुद्दे