UI issue with nil title in UIAlertView iOS 8 beta 5

一个人想着一个人 提交于 2019-12-04 16:48:56

问题


I have an issue related to UIAlertView while running our app on iOS 8. I am showing an alert with title as nil. It was working fine in iOS 7 but now UI looks odd.

I have attached screenshot here.

One solution I found is that when I provide empty string @“” it looks okay. See below screenshot. But I am not sure if the issue I mentioned is bug in beta iOS 8 version or if there is any other better solution. Even with the solution it's not exact as it was in iOS 7.

iOS 7 - showing alert view with title as nil. Screenshot here.


回答1:


It has been the best practice for me to use initWithTitle:@"" for UIAlertView, UIActionSheet since iOS 6 because I was facing a design issue during that time when I was using initWithTitle:nil. I tried to find back, I couldn't find it what exactly is the reason.

From your screen shot on iOS 8, I think there is a change of view hierarchy on UIAlertView for iOS 8. I think Auto layout might be implemented on the view hierarachy as well as you can see the messageLabel jump up to the titleLabel.

I can not be sure because the view hierarchy for UIAlertView is private.

The UIAlertView class is intended to be used as-is and does not support subclassing. The view hierarchy for this class is private and must not be modified.

See: https://developer.apple.com/library/ios/documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html

But, I use the code:-

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

Result on iOS 7.1:

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

Result on iOS 8.0:

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

I am not sure why the UIAlertView frame for iOS 8 is (0 0; 0 0);

Like Mike said, I think you should learn to use UIAlertController for iOS 8.




回答2:


The closest I could get with iOS 8 was by setting the title instead of the message:

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

It should be noted, however, that UIAlertView is deprecated in iOS 8 and, if you're going to be using separate code paths for iOS 7 and iOS 8, you should be using UIAlertController instead:

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];

I got the same results with both methods.




回答3:


I managed to get decent message alignment without the bold font by:

  1. Setting the title to @"" instead of nil, and
  2. (If IOS8) prepend a "\n" in front of the message.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" 
                                    message:@"\nLocation field required." 
                                    delegate:nil 
                                    cancelButtonTitle:@"OK" 
                                    otherButtonTitles:nil];




回答4:


Please try this code. it is working on my side xcode version 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];


来源:https://stackoverflow.com/questions/25559901/ui-issue-with-nil-title-in-uialertview-ios-8-beta-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!