Es ist möglich, dass sich die Aufzählung irgendwann in der Zukunft ändert und unerwartete Ergebnisse verursacht. Das ist alles. In diesem Fall kein Weltuntergangsszenario, aber bessere Praktiken sollten sich durchsetzen.
Brenden
17
majorl3oat: Es wird NICHT empfohlen, anstelle von enum eine konstante Zahl zu verwenden. Die Aufzählung hilft bei der Lesbarkeit des Codes, was ein äußerst wichtiger Faktor ist. Dass es in Zukunft kaputt gehen könnte, ist nur ein schlechtes Design von Apple, und wenn sie es kaputt machen, hätte ich lieber Kompilierungsfehler als das Risiko, dass die Ausrichtung falsch wird, ohne dass ich es merke.
Robin Andersson
6
Robin ist völlig korrekt. Die Verwendung einer Aufzählung ist zweifellos eine bewährte Methode. Sie können IMMER davon ausgehen, dass NSTextAlignmentCenter CENTER bedeutet. Sie können auf keinen Fall davon ausgehen, dass 1 immer CENTER bedeutet. Es sei denn, Apple ist völlig dumm.
Rasmus
Eine Aufzählung dient speziell dazu, dass der Code in Zukunft nicht beschädigt wird. Wenn sie entscheiden, dass die 1 eine 42 sein soll, funktioniert die Aufzählung weiter, der fest codierte Wert schlägt fehl.
Bryan Oakley
Ja, bitte entfernen Sie den TextAlignment = 1, es wird die Leute verwirren und schlechtes Wissen verbreiten
MobileMon
45
Die labelAlignmentEigenschaftsänderung hängt wahrscheinlich damit zusammen, dass Apple NSAttributedStrings in mehr iOS-Steuerelementen einführt und daher die UIText… -Eigenschaften in NSText… -Eigenschaften ändern muss.
Wenn Sie also auf iOS6 aktualisiert haben, sind Sie in Klee; Wechseln Sie einfach von UITextAlignmentCenterzu NSTextAlignmentCenterund genießen Sie die schicken neuen Saiten.
Wenn Sie jedoch mit einem komplexen Projekt arbeiten und es vorziehen, dass sich die Erde nicht so stark unter Ihren Füßen bewegt, möchten Sie möglicherweise eine Weile bei einer älteren Version bleiben und Ihren Code für mehrere Versionen anpassen.
// This won't compile:if([label respondsToSelector:@selector(attributedText:)])
label.textAlignment =UITextAlignmentCenter;else
label.textAlignment =NSTextAlignmentCenter;
Der obige Ansatz funktioniert für neue Methoden ; Sie erhalten Warnungen, aber alles läuft gut. Wenn der Compiler jedoch eine Konstante sieht , von der er nichts weiß, wird er rot und bleibt in seinen Spuren stehen. Es gibt keine Möglichkeit, sich daran NSTextAlignmentCentervorbei zu schleichen . (Nun, es könnte eine Möglichkeit geben, das Verhalten des Compilers hier anzupassen, aber es scheint nicht ratsam.)
Die Problemumgehung besteht darin, einige bedingte Präprozessordefinitionen hinzuzufügen. Wenn Sie so etwas in die h-Datei Ihrer Klasse #import <UIKit/UIKit.h>einfügen (oder vielleicht in eine importierte Konstantendatei - die selbst enthalten muss, um jemals etwas über die NSText ... -Konstanten zu erfahren)…
Da diese UIText / NSText-Änderungen wahrscheinlich für mehrere Steuerelemente auftreten, ist dieser Ansatz recht praktisch.
(Vorsichtsmaßnahme: Als Mitglied der oben genannten Liebhaber von Steady Earth habe ich dies mit einer alten Version getestet, aber noch nicht mit iOS6.)
Ab Xcode 9 iOS 11.4 SDK ist dies immer noch die Lösung für mich. [labelOne setFont: [UIFont fontWithName: @ "HelveticaNeue" Größe: 20]]; labelOne.textAlignment = NSTextAlignmentLeft; // Herausgenommen - kCTLeftTextAlignment; labelOne.text = dateStr; [headerView addSubview: labelOne];
Matthew Ferguson
19
NSTextAlignmentCenterkann anstelle von verwendet werden UITextAlignmentCenterund eine Liste anderer Ersetzungen ist unten:
Eine bessere Konstruktion wäre, etwas mehr zu verwenden wie: #ifdef (__IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_6_0) .... Andernfalls erhalten Sie UITextAlignmentCenter in iOS 7.
Ray Fix
13
Sie müssen beides nicht tun. Xcode 4.5 kompiliert das NSTextAlignmentCenterusw. in iOS 5.
Dies scheint wahr zu sein. Ich habe das Problem mit UILineBreakMode und UITextAlignment - und das Ersetzen durch NSLineBreakMode und NSTextAlignment - funktioniert in Xcode 4.6.3 im 5.0-Simulator und auf einem iPad mit 5.- einwandfrei.
JScarry
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];
NSTextAlignment
.Antworten:
In iOS6 können Sie verwenden
Hoffe das hilft.
quelle
Die
labelAlignment
Eigenschaftsänderung hängt wahrscheinlich damit zusammen, dass Apple NSAttributedStrings in mehr iOS-Steuerelementen einführt und daher die UIText… -Eigenschaften in NSText… -Eigenschaften ändern muss.Wenn Sie also auf iOS6 aktualisiert haben, sind Sie in Klee; Wechseln Sie einfach von
UITextAlignmentCenter
zuNSTextAlignmentCenter
und genießen Sie die schicken neuen Saiten.Wenn Sie jedoch mit einem komplexen Projekt arbeiten und es vorziehen, dass sich die Erde nicht so stark unter Ihren Füßen bewegt, möchten Sie möglicherweise eine Weile bei einer älteren Version bleiben und Ihren Code für mehrere Versionen anpassen.
Der obige Ansatz funktioniert für neue Methoden ; Sie erhalten Warnungen, aber alles läuft gut. Wenn der Compiler jedoch eine Konstante sieht , von der er nichts weiß, wird er rot und bleibt in seinen Spuren stehen. Es gibt keine Möglichkeit, sich daran
NSTextAlignmentCenter
vorbei zu schleichen . (Nun, es könnte eine Möglichkeit geben, das Verhalten des Compilers hier anzupassen, aber es scheint nicht ratsam.)Die Problemumgehung besteht darin, einige bedingte Präprozessordefinitionen hinzuzufügen. Wenn Sie so etwas in die h-Datei Ihrer Klasse
#import <UIKit/UIKit.h>
einfügen (oder vielleicht in eine importierte Konstantendatei - die selbst enthalten muss, um jemals etwas über die NSText ... -Konstanten zu erfahren)……du kannst das:
Und das:
Etc.
Da diese UIText / NSText-Änderungen wahrscheinlich für mehrere Steuerelemente auftreten, ist dieser Ansatz recht praktisch.
(Vorsichtsmaßnahme: Als Mitglied der oben genannten Liebhaber von Steady Earth habe ich dies mit einer alten Version getestet, aber noch nicht mit iOS6.)
quelle
NSTextAlignmentCenter
kann anstelle von verwendet werdenUITextAlignmentCenter
und eine Liste anderer Ersetzungen ist unten:quelle
quelle
Sie müssen beides nicht tun. Xcode 4.5 kompiliert das
NSTextAlignmentCenter
usw. in iOS 5.quelle
quelle
quelle
Ich hatte ein ähnliches Problem und verwendete Folgendes: detailsLabel.textAlignment = NSTextAlignmentCenter;
quelle
in iOS 6 oder höher
Verwenden Sie diesen Wert:
self.lbl_age.textAlignment=NSTextAlignmentCenter;
quelle
Swift 3:
quelle