Пользовательский интерфейс с нулевым заголовком в UIAlertView iOS 8 beta 5

У меня есть проблема, связанная с UIAlertView при запуске нашего приложения на iOS 8. Я показываю предупреждение с заголовком как нуль. Он отлично работал в iOS 7, но теперь пользовательский интерфейс выглядит странно.

Я добавил скриншот здесь.

enter image description here Одно из решений, которое я нашел, - это то, что когда я предоставляю пустую строку @", это выглядит хорошо. См. Снимок экрана ниже. Но я не уверен, что проблема, о которой я упоминал, является ошибкой в ​​версии бета-версии iOS 8 или если есть другое лучшее решение. Даже с решением это не точно, как в iOS 7.

enter image description here

iOS 7 - отображение предупреждения с заголовком как нуль. Снимок экрана здесь. enter image description here

Ответы

Ответ 1

Лучше всего использовать initWithTitle:@"" для UIAlertView, UIActionSheet с iOS 6, потому что в то время, когда я использовал initWithTitle:nil, я столкнулся с проблемой дизайна. Я попытался найти назад, я не мог найти, в чем именно причина.

С вашего экрана, снятого на iOS 8, я думаю, что в iOS 8 изменилась структура иерархии представлений в UIAlertView. Я думаю, что Auto layout может быть реализовано в представлении hierarachy, а также вы можете см. сообщениеLabel перейти к titleLabel.

Я не могу быть уверен, потому что иерархия представления для UIAlertView является частной.

Класс UIAlertView предназначен для использования как есть, а не поддержка подкласса. Иерархия представления для этого класса является частной и не должны быть изменены.

Смотрите: https://developer.apple.com/library/ios/documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html

Но я использую код: -

NSLog(@"%@",[self.alertView description]);

Результат на iOS 7.1:

<UIAlertView: 0x7fb3c05535b0; frame = (18 263; 284 62); opaque = NO; layer = <CALayer: 0x7fb3c0519810>>

Результат на iOS 8.0:

<UIAlertView: 0x7bf64840; frame = (0 0; 0 0); layer = <CALayer: 0x7bf648f0>>

Я не уверен, почему кадр UIAlertView для iOS 8 (0 0; 0 0);

Как сказал Майк, я думаю, вам следует научиться использовать UIAlertController для iOS 8.

Ответ 2

Ближе всего я мог получить с iOS 8, установив заголовок вместо сообщения:

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location field required." message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

UIAlertView iOS8 title set

Следует отметить, однако, что UIAlertView устарел в iOS 8, и если вы собираетесь использовать отдельные коды кода для iOS 7 и iOS 8, вместо этого вы должны использовать UIAlertController:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Location field required."  message:nil preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    [self dismissViewControllerAnimated:YES completion:nil];
}]];

[self presentViewController:alert animated:YES completion:nil];

Я получил те же результаты с обоими методами.

Ответ 3

Мне удалось получить приличное выравнивание сообщений без жирного шрифта:

  • Настройка заголовка на @"" вместо nil и
  • (Если IOS8) перед сообщением добавьте "\n".
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" 
                                    message:@"\nLocation field required." 
                                    delegate:nil 
                                    cancelButtonTitle:@"OK" 
                                    otherButtonTitles:nil];

enter image description here