iOS 6의 라벨 정렬-UITextAlignment 사용 중단


190

UITextAlignmentCenteriOS 6에서 더 이상 사용되지 않는 것 같습니다 .

나는 여전히 그것을 사용하고 잘 작동하지만 경고를줍니다.

이 문제를 어떻게 해결할 수 있습니까?

label.textAlignment = UITextAlignmentCenter;

감사.


7
교육받은 추측 : NSTextAlignment.
JustSid

1
대신 NSTextAlignment를 사용하십시오.
Jayprakash Dubey

답변:


394

iOS6에서는

label.textAlignment = NSTextAlignmentCenter;

도움이 되었기를 바랍니다.


열거 형은 나중에 언젠가 변경되어 예기치 않은 결과가 발생할 수 있습니다. 그게 다야. 이 경우 최후의 시나리오는 없지만 더 나은 방법이 우선합니다.
Brenden

17
majorl3oat : 열거 형 대신 상수를 사용하는 것이 가장 좋습니다. 열거 형은 코드의 가독성을 높이는 데 도움이되며 이는 매우 중요한 요소입니다. 미래에 깨질 수 있다는 것은 Apple의 나쁜 디자인 일뿐이며, 그것이 깨지면 나에게 알리지 않고 정렬이 잘못 될 위험보다 컴파일 오류가 있습니다.
로빈 앤더슨

6
로빈이 완전히 맞습니다. 열거 형을 사용하는 것이 가장 좋습니다. 항상 NSTextAlignmentCenter가 CENTER를 의미한다고 가정 할 수 있으며, 1은 항상 CENTER를 의미한다고 가정 할 수 없습니다. 애플이 완전히 멍 해하지 않는 한.
Rasmus

열거 형은 구체적으로 코드가 미래에 중단되지 않도록합니다. 1을 42로 결정하면 열거 형이 계속 작동하고 하드 코딩 된 값이 실패합니다.
Bryan Oakley

예, textAlignment = 1을 제거하십시오. 사람들을 혼란스럽게하고 나쁜 지식을 전파 할 것입니다.
MobileMon

45

labelAlignment속성 변경은 아마 아이폰 OS 컨트롤의 이상으로 애플의 도입 NSAttributedStrings 관련, 따라서 ... NSText에 ... 속성을 UIText을 변경하는 속성을 필요로한다.

따라서 iOS6으로 업그레이드 한 경우 클로버 상태입니다. 단지 전환 UITextAlignmentCenterNSTextAlignmentCenter하고 멋진 새로운 문자열을 즐길 수 있습니다.

그러나 복잡한 프로젝트로 작업하고 지구가 너무 많이 움직이지 않기를 원한다면 이전 버전을 잠시 사용하고 코드를 여러 버전에 적용하려고 할 수 있습니다.

// 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; [headerView addSubview : labelOne];
Matthew Ferguson

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

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에서 UITextAlignmentCenter가 표시 될 것입니다.
Ray Fix

13

이 중 하나를 수행 할 필요는 없습니다. Xcode 4.5는 NSTextAlignmentCenteriOS 5에서 등을 잘 컴파일합니다 .


1
이것은 사실 인 것 같습니다. UILineBreakMode 및 UITextAlignment에 문제가 있으며 NSLineBreakMode 및 NSTextAlignment로 대체하면 5.0 시뮬레이터의 Xcode 4.6.3 및 5.-를 실행하는 iPad에서 제대로 작동합니다.
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

비슷한 문제가 있었고 다음을 사용했습니다. detailsLabel.textAlignment = NSTextAlignmentCenter;



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.