본문 바로가기
IT·디지털/IT 개발자 팁

[iOS] iOS8 AlertView 텍스트 상단 정렬 문제와 해결 방법

by 가을이짱짱 2014. 10. 10.
반응형

iOS8 AlertView 텍스트 정렬 문제

예전 iOS 앱을 유지보수하다 보면 UIAlertView를 사용한 오래된 코드에서, iOS8 업데이트 후 Alert 메시지 텍스트가 상단에 붙어 보이는 문제를 겪은 적이 있습니다. iOS7에서는 정상 가운데 정렬이었지만, iOS8에서 레이아웃 방식이 변경되면서 발생한 현상입니다.

해결은 매우 단순합니다. AlertView 제목(title)에 nil 대신 빈 문자열("")을 넣으면 텍스트가 다시 정상적으로 중앙 정렬됩니다.


1. 문제 원인

iOS8에서는 UIAlertView 내부 레이아웃이 변경되면서, title이 nil일 경우 message가 타이틀 영역까지 끌어올려지는 레이아웃 버그가 있었습니다.

즉, 다음 코드처럼 title을 nil로 지정하면 문제가 발생합니다:


UIAlertView *alertView =
    [[UIAlertView alloc] initWithTitle:nil
                               message:@"테스트입니다."
                              delegate:nil
                     cancelButtonTitle:@"확인"
                     otherButtonTitles:nil];
[alertView show];

이 경우 iOS8에서는 message가 상단에 딱 붙어 보입니다.


2. 해결 방법 (Objective-C, UIAlertView)

title을 nil → 빈 문자열("")로 변경하면 됩니다.


UIAlertView *alertView =
    [[UIAlertView alloc] initWithTitle:@""
                               message:@"테스트입니다."
                              delegate:nil
                     cancelButtonTitle:@"확인"
                     otherButtonTitles:nil];
[alertView show];

title이 빈 문자열이면 레이아웃이 정상적으로 적용되기 때문에 message가 제대로 중앙에 표시됩니다.


3. 중요: UIAlertView는 완전 deprecated

iOS9부터 UIAlertView는 완전히 사용 금지(deprecated) 되었고, 2025년 현재는 UIAlertController를 반드시 사용해야 합니다.

따라서 최신 앱에서는 다음 방식으로 구현합니다.


let alert = UIAlertController(
    title: nil,  // iOS8 레거시 문제 없음
    message: "테스트입니다.",
    preferredStyle: .alert
)

alert.addAction(UIAlertAction(title: "확인", style: .default))
present(alert, animated: true)

UIAlertController는 iOS8에서 도입된 새로운 Alert 시스템으로 title이 nil이어도 레이아웃이 정상적으로 표시되기 때문에 위와 같은 문제는 발생하지 않습니다.


4. 정리

  • iOS8에서만 UIAlertView 메시지가 상단으로 붙는 버그 있음
  • 해결: title을 nil → 빈 문자열("")로 변경
  • 현재(2025년 기준): UIAlertView는 사용 금지, 반드시 UIAlertController 사용
  • 최신 Alert 시스템에서는 해당 문제가 발생하지 않음

레거시 프로젝트 유지보수라면 간단히 title을 빈 문자열로 바꾸는 방식으로 해결할 수 있고, 신규 프로젝트라면 UIAlertController만 사용하면 됩니다.

반응형