NSAttributedString पाठ संरेखण जोड़ें


109

मैं पाठ को केंद्र में रखने के लिए एक NSAttributedString में पाठ संरेखण विशेषता कैसे जोड़ सकता हूं?

संपादित करें: क्या मैं कुछ गलत कर रहा हूं? यह संरेखण को बदलने के लिए प्रतीत नहीं होता है।

CTParagraphStyleSetting setting;
setting.spec = kCTParagraphStyleSpecifierAlignment;
setting.valueSize = kCTCenterTextAlignment;

CTParagraphStyleSetting settings[1] = {
    {kCTParagraphStyleSpecifierAlignment, sizeof(CGFloat), &setting},           
};

CTParagraphStyleRef paragraph = CTParagraphStyleCreate(settings, sizeof(setting));

NSMutableAttributedString *mutableAttributed = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedString];
[mutableAttributed addAttributes:[NSDictionary dictionaryWithObjectsAndKeys:(NSObject*)paragraph ,(NSString*) kCTParagraphStyleAttributeName, nil] range:_selectedRange];

जवाबों:


39

जैसा NSAttributedStringकि मुख्य रूप से आईओएस पर कोर टेक्स्ट के साथ उपयोग किया जाता है, आपको CTParagraphStyleइसके बजाय उपयोग करना होगा NSParagraphStyle। कोई परिवर्तनशील संस्करण नहीं है।

उदाहरण के लिए:

CTTextAlignment alignment = kCTCenterTextAlignment;

CTParagraphStyleSetting alignmentSetting;
alignmentSetting.spec = kCTParagraphStyleSpecifierAlignment;
alignmentSetting.valueSize = sizeof(CTTextAlignment);
alignmentSetting.value = &alignment;

CTParagraphStyleSetting settings[1] = {alignmentSetting};

size_t settingsCount = 1;
CTParagraphStyleRef paragraphRef = CTParagraphStyleCreate(settings, settingsCount);
NSDictionary *attributes = @{(__bridge id)kCTParagraphStyleAttributeName : (__bridge id)paragraphRef};
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:@"Hello World" attributes:attributes];

मैं नहीं करता, मैं EGOTextView नामक एक पुस्तकालय का उपयोग करता हूं, इसे एक जिम्मेदार स्ट्रिंग मिलता है
एरियलक्स

1
आपके पैराग्राफ की शैली बनाने के तरीके में कुछ गड़बड़ है। मैंने जो उदाहरण जोड़ा है, उसकी जाँच करें, यह EGOTextView में काम करता है, कम से कम इसने लाइन को केंद्र के रूप में प्रदर्शित किया है, लेकिन बात छोटी लग रही है, चयन केंद्रित पाठ के साथ ठीक से काम नहीं करता है।
ओम

हाँ, यह बग्स से भरा है, मैं पिछले 4 हफ्तों से बग्स को ठीक करने की कोशिश कर रहा हूँ। लेकिन यह एक शानदार शुरुआत थी, इसके बिना मुझे नहीं पता होगा कि मुझे अपने समृद्ध पाठ संपादक के साथ कहां से शुरू करना है, आपके उत्तर के लिए धन्यवाद, यह मेरे लिए काम करता है।
एरियलक्स

1
@omz आपने मेरी नौकरी बचा ली। : D धन्यवाद
Awais तारिक

1
@ बॉबी मैं सहमत हूं, लेकिन मैंने 5 साल पहले उस उत्तर को लिखा था, और NSParagraphStyleआईओएस पर वापस उपलब्ध नहीं था।
OMZ

266
 NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle.new;
 paragraphStyle.alignment                = NSTextAlignmentCenter;

 NSAttributedString *attributedString   = 
[NSAttributedString.alloc initWithString:@"someText" 
                              attributes:
         @{NSParagraphStyleAttributeName:paragraphStyle}];

स्विफ्ट 4.2

let paragraphStyle: NSMutableParagraphStyle = NSMutableParagraphStyle()
    paragraphStyle.alignment = NSTextAlignment.center

    let attributedString = NSAttributedString(string: "someText", attributes: [NSAttributedString.Key.paragraphStyle : paragraphStyle])

1
यह काम नहीं करता है NSTextAlignmentJustified। क्या आप बता सकते हैं क्यों? और मैं संरेखण को कैसे उचित ठहरा सकता हूं?
सैम

1
नोट: स्वीकृत उत्तर मेरे लिए iOS7 पर काम नहीं किया, हालाँकि यह 100% सही दिखाई दिया जहाँ तक मैं बता सकता हूँ। इस उत्तर ने सही तरीके से काम किया, और निश्चित रूप से बहुत सरल कोड है :)
एडम

मैं उसी समस्या के साथ हूं सैम रिपोर्ट। इसे छोड़कर सभी संरेखण के लिए ठीक है NSTextAlignmentJustified। क्या यह iOS7 बग है?
मैथ्यूस अब्रू

6
हल किया। बस जोड़ने के NSBaselineOffsetAttributeName : @0गुण शब्दकोश के लिए।
माथेस अब्रेयू

धन्यवाद यह मेरे लिए भी काम किया, वैसे क्या नरक है कि वाक्यविन्यास NSAttributedString.alloc?
klefevre

92

मैं एक ही मुद्दे के लिए खोज कर रहा था और इस तरह से NSAttributedString में पाठ को संरेखित करने में सक्षम था:

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init] ;
[paragraphStyle setAlignment:NSTextAlignmentCenter];

NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithString:string];
[attribString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [string length])];

1
यह सबसे अच्छा उत्तर है, लेकिन जब मैंने यह सवाल पूछा तो इस उत्तर में प्रयुक्त एपीआई अभी तक iOS पर उपलब्ध नहीं थे
aryaxt

क्या इसे केवल एक निश्चित सीमा तक लागू करने का कोई तरीका है?
nburk

हाँ, रेंज पैरामीटर को संपादित करके। NSMakeRange(0, [string length])पूर्ण स्ट्रिंग का प्रतिनिधित्व करता है।
ZeMoon

67

स्विफ्ट 4.0+

let titleParagraphStyle = NSMutableParagraphStyle()
titleParagraphStyle.alignment = .center

let titleFont = UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline)
let title = NSMutableAttributedString(string: "You Are Registered", 
    attributes: [.font: titleFont,    
    .foregroundColor: UIColor.red, 
    .paragraphStyle: titleParagraphStyle])

स्विफ्ट 3.0+

let titleParagraphStyle = NSMutableParagraphStyle()
titleParagraphStyle.alignment = .center

let titleFont = UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline)
let title = NSMutableAttributedString(string: "You Are Registered", 
    attributes: [NSFontAttributeName:titleFont,    
    NSForegroundColorAttributeName:UIColor.red, 
    NSParagraphStyleAttributeName: titleParagraphStyle])

(नीचे मूल उत्तर)

स्विफ्ट 2.0+

let titleParagraphStyle = NSMutableParagraphStyle()
titleParagraphStyle.alignment = .Center

let titleFont = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
let title = NSMutableAttributedString(string: "You Are Registered",
    attributes:[NSFontAttributeName:titleFont,   
    NSForegroundColorAttributeName:UIColor.redColor(), 
    NSParagraphStyleAttributeName: titleParagraphStyle])

दुर्भाग्य से NSAttributedString के ड्रा () फ़ंक्शन के साथ संयोजन के रूप में काम नहीं करता है
ऐश

21

स्विफ्ट 4 उत्तर:

// Define paragraph style - you got to pass it along to NSAttributedString constructor
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center

// Define attributed string attributes
let attributes = [NSAttributedStringKey.paragraphStyle: paragraphStyle]

let attributedString = NSAttributedString(string:"Test", attributes: attributes)

2

स्विफ्ट 4 में:

    let paraStyle = NSMutableParagraphStyle.init()
    paraStyle.alignment = .left

    let str = "Test Message"
    let attribute = [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 12)]

    let attrMessage = NSMutableAttributedString(string: str, attributes: attribute)


    attrMessage.addAttribute(kCTParagraphStyleAttributeName as NSAttributedStringKey, value: paraStyle, range: NSMakeRange(0, str.count))

ऑफ-द-वन एक सीमा पर: NSMakeRange (0, str.count)
मार्टिन-गाइल्स

-5
[averagRatioArray addObject:[NSString stringWithFormat:@"When you respond Yes to %@ the average response to    %@ was %0.02f",QString1,QString2,M1]];
[averagRatioArray addObject:[NSString stringWithFormat:@"When you respond No  to %@ the average response to    %@ was %0.02f",QString1,QString2,M0]];

UIFont *font2 = [UIFont fontWithName:@"Helvetica-Bold" size:15];
UIFont *font = [UIFont fontWithName:@"Helvetica-Bold" size:12];

NSMutableAttributedString *str=[[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"When you respond Yes to %@ the average response to %@ was",QString1,QString2]];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange(0,[@"When you respond Yes to " length])];
[str addAttribute:NSFontAttributeName value:font2 range:NSMakeRange([@"When you respond Yes to " length],[QString1 length])];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange([QString1 length],[@" the average response to " length])];
[str addAttribute:NSFontAttributeName value:font2 range:NSMakeRange([@" the average response to " length],[QString2 length])];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange([QString2 length] ,[@" was" length])];
// [str addAttribute:NSFontAttributeName value:font2 range:NSMakeRange(49+[QString1 length]+[QString2 length] ,8)];
[averagRatioArray addObject:[NSString stringWithFormat:@"%@",str]];

2
कृपया अपना उत्तर संपादित करें और कोड को पठनीय बनाने के लिए प्रारूपित करें।
Kleopatra
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.