警报视图在iOS7中显示白色矩形

时间:2013-09-19 12:51:28

标签: ios ios7

以下代码在iOS 5到6.1中运行良好。我甚至在应用程序中存储了该代码:

-(void)showActivityIndicator
{
    if(!mLoadingView) //
    {
        mLoadingView = [[UIAlertView alloc] initWithTitle:@"" message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
        mLoadingView.tag = kAlertViewTag;
    }

    [mLoadingView show];
}

- (void)willPresentAlertView:(UIAlertView *)alertView
{
    if (alertView.tag == kAlertViewTag)
    {
        UIActivityIndicatorView *actInd = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
        actInd.frame = CGRectMake(128.0f, 45.0f, 25.0f, 25.0f);
        [alertView addSubview:actInd];
        [actInd startAnimating];

        UILabel *l = [[UILabel alloc]init];
        l.text = NSLocalizedString(@"PRODUCT_PURCHASE_INDICATOR_TITLE", @"Please wait...");
        l.font = [UIFont fontWithName:@"Helvetica" size:16];

        float strWidth = [l.text sizeWithFont:l.font].width;
        float frameWidth = alertView.frame.size.width;
        l.frame = CGRectMake((frameWidth - strWidth)/2, -25, 210, 100);

        l.textColor = [UIColor whiteColor];
        l.shadowColor = [UIColor blackColor];
        l.shadowOffset = CGSizeMake(1.0, 1.0);
        l.backgroundColor = [UIColor clearColor];
        [alertView addSubview:l];
    }
}

它将显示没有按钮以及活动指示器和标签的警报视图。但是在iOS7中我只能看到白色圆角矩形,没有活动指示。

从iOS 5到7,我可以做些什么?

更新

为了更具描述性,我正在添加屏幕截图。以下是iOS 5到6.1截图。在那里工作得很好。

enter image description here

以下是iOS7。正如您所看到的,即使尺寸更小。看起来它没有完全初始化或其他什么。

enter image description here

3 个答案:

答案 0 :(得分:20)


现在addSubview在iOS7的UIAlertView中无法使用

UIAlertView类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改

作为替代方案,您可以使用SVProgressHUD

答案 1 :(得分:20)

从iOS 7开始,您可以:

    [alertView setValue:customContentView forKey:@"accessoryView"];

在标准提醒视图中获取自定义内容。

答案 2 :(得分:19)

我必须非常快速地解决这个问题,因此我构建了一个iOS7 UIAlertView风格的UIView及其动画,可以使用任何自定义内容进行扩展。

可能有其他人可以使用我的解决方案,因此我制作了the whole code available on Github

enter image description here

此外,如果您希望在以前的OS版本下继续使用UIAlertView,则必须分叉代码。它可能听起来很糟糕,我正在使用以下内容:

float sysVer = [[[UIDevice currentDevice] systemVersion] floatValue];

if (sysVer < 7) {
  // your old solution
} else {
  .. // iOS7 dialog code
}

(请注意,这绝不是一个真正的解决方案 - 如果Apple不希望我们将对话用于各种事情,那么我们可能不应该这样做。)