आईओएस 6 में लेबल संरेखण - UITextAlignment पदावनत


190

जैसे लगता UITextAlignmentCenterहै iOS 6 में पदावनत किया गया है।

मैं अभी भी इसका उपयोग करता हूं और अच्छी तरह से काम करता हूं, लेकिन यह एक चेतावनी देता है।

मैं इसे कैसे ठीक करूं?

label.textAlignment = UITextAlignmentCenter;

धन्यवाद।


7
शिक्षित अनुमान NSTextAlignment:।
जस्ट

1
इसके बजाय NSTextAlignment का उपयोग करें।
जयप्रकाश दुबे

जवाबों:


394

IOS6 में आप उपयोग कर सकते हैं

label.textAlignment = NSTextAlignmentCenter;

उम्मीद है की यह मदद करेगा।


यह संभव है कि भविष्य में कुछ समय पर एनम मेय में बदलाव हो और अप्रत्याशित परिणाम आए। बस इतना ही। इस मामले में कोई प्रलय का दिन नहीं है, लेकिन बेहतर प्रथाओं को प्रबल होना चाहिए।
ब्रेंडेन

17
majorl3oat: एनम के बजाय एक निरंतर संख्या का उपयोग करना सबसे अच्छा अभ्यास नहीं है। एनम कोड की पठनीयता में मदद करता है जो एक अत्यंत महत्वपूर्ण कारक है। कि यह भविष्य में टूट सकता है Apple से सिर्फ खराब डिजाइन है, और अगर वे इसे तोड़ते हैं तो मैं संकलन त्रुटियों की तुलना में यह जोखिम होगा कि संरेखण मेरे बिना गलत हो जाता है।
रॉबिन एंडरसन

6
रॉबिन पूरी तरह सही है। एक Enum का उपयोग करना सबसे अच्छा अभ्यास है, इसमें कोई संदेह नहीं है। आप हमेशा यह मान सकते हैं कि NSTextAlignmentCenter का अर्थ CENTER है, आप NO WAY में यह मान सकते हैं कि 1 का अर्थ हमेशा CENTER है। जब तक कि Apple पूरी तरह से बेधड़क नहीं है।
रासस

एक एनम विशेष रूप से है ताकि कोड भविष्य में टूट न जाए। यदि वे तय करते हैं कि 1 को 42 होना चाहिए, तो एनम काम करना जारी रखेगा, हार्ड-कोडेड मान विफल हो जाएगा।
ब्रायन ओकले

हां कृपया टेक्स्ट हटाएं = 1, यह लोगों को भ्रमित करेगा और बुरा ज्ञान फैलाएगा
MobileMon

45

labelAlignmentसंपत्ति परिवर्तन शायद आईओएस नियंत्रण के अधिक करने के लिए एप्पल के शुरू NSAttributedStrings से संबंधित है, और इसलिए NSText को UIText बदलने के लिए ... गुण की आवश्यकता होगी, ... गुण।

इसलिए यदि आपने iOS6 में अपग्रेड किया है, तो आप क्लोवर में हैं; बस से स्विच UITextAlignmentCenterकरें NSTextAlignmentCenterऔर फैंसी नए तार का आनंद लें।

लेकिन अगर आप एक जटिल परियोजना के साथ काम कर रहे हैं और यह पसंद करेंगे कि पृथ्वी आपके पैरों के नीचे से न चले, तो आप कुछ समय के लिए पुराने संस्करण के साथ रहना चाहते हैं, और कई संस्करणों के लिए अपने कोड को अनुकूलित कर सकते हैं, कुछ इस तरह:

// This won't compile:
if ([label respondsToSelector:@selector(attributedText:)]) 
    label.textAlignment = UITextAlignmentCenter;
else 
    label.textAlignment = NSTextAlignmentCenter;

उपरोक्त दृष्टिकोण नए तरीकों के लिए काम करता है ; आपको चेतावनी मिलती है लेकिन सब कुछ ठीक चलता है। लेकिन जब कंपाइलर एक स्थिरांक देखता है जिसके बारे में उसे पता नहीं होता है, तो वह लाल हो जाता है और अपने पटरियों में रुक जाता है। वहाँ कोई रास्ता नहीं NSTextAlignmentCenterयह पिछले चुपके है। (ठीक है, यहाँ संकलक के व्यवहार को अनुकूलित करने का एक तरीका हो सकता है, लेकिन यह असंगत लगता है।)

वर्कअराउंड कुछ सशर्त प्रीप्रोसेसर को परिभाषित करने के लिए है। यदि आप अपनी कक्षा की h फ़ाइल में कुछ ऐसा डालते हैं (या शायद एक आयातित स्थिरांक फ़ाइल में - जिसे स्वयं #import <UIKit/UIKit.h>को NSText ... स्थिरांक के बारे में जानने के लिए अवश्य शामिल करना चाहिए ) ...

#ifdef NSTextAlignmentCenter // iOS6 and later
#   define kLabelAlignmentCenter    NSTextAlignmentCenter
#   define kLabelAlignmentLeft      NSTextAlignmentLeft
#   define kLabelAlignmentRight     NSTextAlignmentRight
#   define kLabelTruncationTail     NSLineBreakByTruncatingTail 
#   define kLabelTruncationMiddle   NSLineBreakByTruncatingMiddle
#else // older versions
#   define kLabelAlignmentCenter    UITextAlignmentCenter
#   define kLabelAlignmentLeft      UITextAlignmentLeft
#   define kLabelAlignmentRight     UITextAlignmentRight
#   define kLabelTruncationTail     UILineBreakModeTailTruncation
#   define kLabelTruncationMiddle   UILineBreakModeMiddleTruncation
#endif

…तुम यह केर सकते हो:

label.textAlignment = kLabelAlignmentCenter;

और इस:

label.lineBreakMode = kLabelTruncationMiddle;

आदि।

चूंकि ये UIText / NSText परिवर्तन कई नियंत्रणों के लिए पॉपिंग होने की संभावना है, इसलिए यह दृष्टिकोण काफी आसान है।

(कैविएट: उपर्युक्त स्थिर-पृथ्वी प्रेमियों के सदस्य होने के नाते, मैंने इसे पुराने संस्करण के साथ परीक्षण किया है, लेकिन अभी तक iOS6 के साथ नहीं।)


Xcode 9 iOS 11.4 SDK के रूप में, यह अभी भी मेरे लिए समाधान है। [labelOne setFont: [UIFont fontWithName: @ "HelveticaNeue" आकार: 20]]; labelOne.textAlignment = NSTextAlignmentLeft; // लिया गया - kCTLeftTextAlignment; labelOne.text = dateStr; [शीर्ष लेख addSubview: labelOne];
मैथ्यू फर्ग्यूसन

19

NSTextAlignmentCenterके स्थान पर इस्तेमाल किया जा सकता है UITextAlignmentCenterऔर अन्य प्रतिस्थापनों की एक सूची नीचे है:

#ifdef __IPHONE_6_0 // iOS6 and later
#   define UITextAlignmentCenter    NSTextAlignmentCenter
#   define UITextAlignmentLeft      NSTextAlignmentLeft
#   define UITextAlignmentRight     NSTextAlignmentRight
#   define UILineBreakModeTailTruncation     NSLineBreakByTruncatingTail
#   define UILineBreakModeMiddleTruncation   NSLineBreakByTruncatingMiddle
#endif

1
यह मेरे लिए काम करता है। IOS 6.1 और iOS 5.0 के लिए सिम्युलेटर पर परीक्षण किया गया।
जेस्करी

15
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0)
# define ALIGN_CENTER NSTextAlignmentCenter
#else
# define ALIGN_CENTER UITextAlignmentCenter
#endif

UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
label.text = @"There is no spoon";
label.textAlignment = ALIGN_CENTER;
[self addSubview:label];

एक बेहतर निर्माण कुछ और का उपयोग करने के लिए किया जाएगा जैसे: #ifdef (__IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_6_0) .... अन्यथा आप iOS 7 में UextextAlignmentCenter प्राप्त करने जा रहे हैं
रे फिक्स

13

आपको इनमें से कुछ भी नहीं करना है। NSTextAlignmentCenterIOS 5 में Xcode 4.5 , आदि को संकलित करेगा ।


1
यह सच प्रतीत होता है। मेरे पास UILineBreakMode और UITextAlignment-- के साथ समस्या है और उन्हें NSLineBreakMode और NSTextAlignment-- के साथ प्रतिस्थापित करते हुए 5.0 सिम्युलेटर में Xcode 4.6.3 और iPad पर चलने वाले 5.- में ठीक काम करता है।
जेस्केरी

2
UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 150, 40)];
[label1 setText:@"Your String"];
[label1 setBackgroundColor:[UIColor clearColor]];
[label1 setNumberOfLines:0];
[label1 sizeToFit];

//For Center Alignment
[label1 setTextAlignment:NSTextAlignmentCenter];

//For Right Alignment
[label1 setTextAlignment:NSTextAlignmentRight];

//For Left Alignment
[label1 setTextAlignment:NSTextAlignmentLeft];

// Add the label into the view

[self.view addSubview:label1];


0

मेरे पास एक समान मुद्दा था और निम्नलिखित का उपयोग किया था: detailsLabel.textAlignment = NSTextAlignmentCenter;



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.