iOS 6のラベル配置-UITextAlignmentは廃止予定


190

のようUITextAlignmentCenterですiOS 6で非推奨。

私はまだそれを使用し、うまく機能しますが、警告を出します。

どうすれば修正できますか?

label.textAlignment = UITextAlignmentCenter;

ありがとう。


7
経験に基づく推測:NSTextAlignment
JustSid 2012

1
代わりにNSTextAlignmentを使用してください。
Jayprakash Dubey 14

回答:


394

iOS6で使用できます

label.textAlignment = NSTextAlignmentCenter;

お役に立てれば。


enumが将来のある時点で変更され、予期しない結果を引き起こす可能性があります。それで全部です。この場合、最終的なシナリオはありませんが、より適切な方法が優先されます。
ブレンデン

17
majorl3oat:enumの代わりに定数を使用することはベストプラクティスではありません。列挙型は、非常に重要な要素であるコードの読みやすさを支援します。それが将来壊れるかもしれないのはAppleの悪いデザインに過ぎない。もし壊れてしまったら、知らないうちにアラインメントがおかしくなってしまうリスクを負うより、むしろコンパイルエラーがあったほうがいい。
Robin Andersson、

6
ロビンは完全に正しいです。enumを使用することは、間違いなくベストプラクティスです。常にNSTextAlignmentCenterがCENTERを意味すると想定することができますが、1が常にCENTERを意味すると想定することはできません。アップルが完全に行き詰っていない限り。
ラスムス

enumは特にコードが将来壊れないようにするためのものです。1を42にする必要があると彼らが決定した場合、列挙型は引き続き機能し、ハードコードされた値は失敗します。
Bryan Oakley

はい、textAlignment = 1を削除してください。これは、人々を混乱させ、悪い知識を広めます
MobileMon

45

labelAlignmentプロパティの変更は、おそらくAppleのは、より多くのiOSコントロールのに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" size:20]]; labelOne.textAlignment = NSTextAlignmentLeft; //取り出し-kCTLeftTextAlignment; labelOne.text = dateStr; [headerView 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のシミュレーターでテスト済み。
JScarry 2013年

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];

そうしないとあなたはiOSの7でUITextAlignmentCenterを取得しようとしている....の#ifdef(__IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_6_0):より良い建設は、より多くのようなものを使用することです
レイ修正

13

これらのいずれかを実行する必要はありません。Xcode 4.5はNSTextAlignmentCenteriOS 5で等をコンパイルします。


1
これは本当のようです。UILineBreakModeとUITextAlignmentに問題があり、NSLineBreakModeとNSTextAlignmentに置き換えると、5.0シミュレータのXcode 4.6.3と5.-を実行しているiPadで正常に動作します。
JScarry 2013年

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;



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.