Проблема пользовательского интерфейса с нулевым названием в UIAlertView iOS 8 beta 5
У меня есть проблема, связанная с UIAlertView при запуске нашего приложения на iOS 8. Я показываю предупреждение с заголовком nil. В iOS 7 все работало нормально, но теперь интерфейс выглядит странно.
Я прикрепил скриншот здесь.
Одно решение, которое я нашел, состоит в том, что когда я предоставляю пустую строку @ "", все выглядит хорошо. Смотрите скриншот ниже. Но я не уверен, что проблема, о которой я упоминал, связана с ошибкой в бета-версии iOS 8 или есть какое-либо иное лучшее решение. Даже с решением это не точно, как это было в iOS 7.
iOS 7 - отображение вида оповещения с заголовком nil. Скриншот здесь.
4 ответа
Это была лучшая практика для меня, чтобы использовать initWithTitle:@""
за UIAlertView
, UIActionSheet
начиная с iOS 6, потому что я столкнулся с проблемой дизайна в то время, когда я использовал initWithTitle:nil
, Я пытался найти обратно, я не мог найти, в чем именно причина.
С вашего скриншота на iOS 8, я думаю, что изменение представления иерархии на UIAlertView для iOS 8. Я думаю, Auto layout
может быть реализовано в иерархии представлений, а также вы можете увидеть, что messageLabel перепрыгивает на titleLabel.
Я не могу быть уверен, потому что иерархия представления для UIAlertView является частной.
Класс UIAlertView предназначен для использования как есть и не поддерживает создание подклассов. Иерархия представления для этого класса является закрытой и не должна быть изменена.
Но я использую код:-
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.
Самое близкое, что я мог получить с iOS 8, установив заголовок вместо сообщения:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location field required." message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
Следует отметить, однако, что 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];
Я получил одинаковые результаты с обоими методами.
Мне удалось добиться приличного выравнивания сообщений без жирного шрифта:
- Установка заголовка на @"" вместо nil, и
- (Если IOS8) добавьте "\n" перед сообщением.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"\nLocation field required." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
Пожалуйста, попробуйте этот код. это работает на моей стороне XCode версии 9.2
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:nil
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* btn1 = [UIAlertAction
actionWithTitle:@"OKAY"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
}];
[self presentViewController:alert animated:YES completion:nil];