Пользовательский интерфейс с нулевым заголовком в UIAlertView iOS 8 beta 5
У меня есть проблема, связанная с UIAlertView при запуске нашего приложения на iOS 8.
Я показываю предупреждение с заголовком как нуль. Он отлично работал в iOS 7, но теперь пользовательский интерфейс выглядит странно.
Я добавил скриншот здесь.
Одно из решений, которое я нашел, - это то, что когда я предоставляю пустую строку @", это выглядит хорошо. См. Снимок экрана ниже. Но я не уверен, что проблема, о которой я упоминал, является ошибкой в версии бета-версии 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]()