İOS 6'da Etiket Hizalama - UITextAlignment kullanımdan kaldırıldı


190

Görünüşe göre UITextAlignmentCenteriOS 6'da kullanımdan kaldırıldı.

Hala kullanıyorum ve iyi çalışıyor, ancak bir uyarı veriyor.

Bunu nasıl düzeltebilirim?

label.textAlignment = UITextAlignmentCenter;

Teşekkürler.


7
Eğitimli tahmin: NSTextAlignment.
JustSid

1
Bunun yerine NSTextAlignment kullanın.
Jayprakash Dubey

Yanıtlar:


394

İOS6'da şunları kullanabilirsiniz:

label.textAlignment = NSTextAlignmentCenter;

Bu yardımcı olur umarım.


Numaralandırma gelecekte bir süre değişebilir ve beklenmedik sonuçlara neden olabilir. Bu kadar. Bu durumda kıyamet günü senaryosu yok, ancak daha iyi uygulamalar geçerli olmalı.
Brenden

17
majorl3oat: Enum yerine sabit bir sayı kullanmak en iyi uygulama değildir. Enum, son derece önemli bir faktör olan kodun okunabilirliğine yardımcı olur. Gelecekte kırılabileceği Apple'ın sadece kötü bir tasarımıdır ve eğer kırılırlarsa, fark etmeden hizalamanın yanlış olduğunu riske atmak yerine derleme hatalarına sahip olmayı tercih ederim.
Robin Andersson

6
Robin TAMAMEN doğru. Şüphe yok ki, bir enum IS en iyi uygulama kullanmak. DAİMA NSTextAlignmentCenter'ın MERKEZ olduğunu varsayabilirsiniz, HİÇBİR ŞEKİLDE 1'in her zaman MERKEZ olduğunu varsayabilirsiniz. Apple tamamen saplamadığı sürece.
Rasmus

bir numaralandırma özellikle kod gelecekte kırılmaz. 1'in 42 olması gerektiğine karar verirlerse, enum çalışmaya devam eder, sabit kodlanmış değer başarısız olur.
Bryan Oakley

Evet lütfen metni kaldırınAlignment = 1, insanları şaşırtacak ve kötü bilgileri yayacak
MobileMon

45

labelAlignmentMülkiyet değişikliği muhtemelen iOS kontrollerin daha Apple'ın tanıtan NSAttributedStrings ilgili ve bu nedenle ... NSText için ... özelliklerini UIText değiştirmeye özelliklerini ihtiyacı olduğunu.

Dolayısıyla, iOS6'ya geçtiyseniz, yoncatasınız; sadece yeni dizeleri UITextAlignmentCenterdeğiştirin NSTextAlignmentCenterve keyfini çıkarın.

Ancak karmaşık bir proje ile çalışıyorsanız ve dünyanın ayaklarınızın altında çok fazla hareket etmemesini tercih ediyorsanız, bir süre daha eski bir sürüme sadık kalmak ve kodunuzu birden fazla sürüm için uyarlamak isteyebilirsiniz, örneğin:

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

Yukarıdaki yaklaşım yeni yöntemler için işe yarar ; uyarılar alıyorsunuz ama her şey yolunda gidiyor. Ancak derleyici bilmediği bir sabit gördüğü zaman kırmızıya döner ve izlerinde durur. Gizlice geçmenin yolu yok NSTextAlignmentCenter. (Derleyicinin davranışını burada özelleştirmenin bir yolu olabilir, ancak bu tavsiye edilemez gibi görünüyor.)

Çözüm, bazı koşullu önişlemci tanımları eklemektir. Sınıfınızın h dosyasına (veya belki de #import <UIKit/UIKit.h>NSText ... sabitleri hakkında bilgi sahibi olmak için kendisini içermesi gereken - içe aktarılan sabitler dosyasına ) böyle bir şey koyarsanız…

#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

…Bunu yapabilirsiniz:

label.textAlignment = kLabelAlignmentCenter;

Ve bu:

label.lineBreakMode = kLabelTruncationMiddle;

Vb.

Bu UIText / NSText değişikliklerinin birden fazla kontrol için ortaya çıkması muhtemel olduğundan, bu yaklaşım oldukça kullanışlıdır.

(Uyarı: Yukarıda adı geçen sabit toprak severlerin bir üyesi olarak, bunu eski bir sürümle test ettim, ancak henüz iOS6 ile değil.)


Xcode 9 iOS 11.4 SDK'dan itibaren, bu hala benim için bir çözüm. [labelOne setFont: [UIFont fontWithName: @ "HelveticaNeue" boyut: 20]]; labelOne.textAlignment = NSTextAlignmentLeft; // Çıkarıldı - kCTLeftTextAlignment; labelOne.text = dateStr; [headerView addSubview: labelOne];
Matthew Ferguson

19

NSTextAlignmentCenteryerine kullanılabilir UITextAlignmentCenterve diğer değiştirmelerin listesi aşağıdadır:

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

1
Bu benim için çalışıyor. İOS 6.1 ve iOS 5.0 için simülatörde test edilmiştir.
JScarry

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

Daha iyi bir yapı daha fazla şey kullanmak olacaktır: #ifdef (__IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_6_0) .... Aksi takdirde iOS 7'de UITextAlignmentCenter alacaksınız
Ray Fix

13

Bunların hiçbirini yapmak zorunda değilsiniz. Xcode 4.5, NSTextAlignmentCenteriOS 5'te vb.


1
Bu doğru gibi görünüyor. UILineBreakMode ve UITextAlignment ile ilgili sorunum var - ve bunları NSLineBreakMode ve NSTextAlignment ile değiştirmek - 5.0 simülatöründe ve 5. çalışan bir iPad'de Xcode 4.6.3'te iyi çalışıyor.
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];


0

Benzer bir sorun vardı ve aşağıdaki kullanılır: detailsLabel.textAlignment = NSTextAlignmentCenter;


0

iOS 6 veya üstü sürümlerde

bu değeri kullan:

self.lbl_age.textAlignment=NSTextAlignmentCenter;


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.