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

警报视图在iOS7中显示白色矩形,ios,ios7,Ios,Ios7,以下代码在iOS5到6.1之间运行良好。我甚至在商店里有使用该代码的应用程序: -(void)showActivityIndicator { if(!mLoadingView) // { mLoadingView = [[UIAlertView alloc] initWithTitle:@"" message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:nil]; mLoadi

以下代码在iOS5到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到iOS 7,我能做些什么来完成这项工作

更新:

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

下面是iOS7。正如你所看到的,甚至尺寸都更小。看起来它还没有完全初始化或者什么的


现在,
addSubview
在iOS7的
UIAlertView
中不可用

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


作为一种替代方法,您可以使用。

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

可能还有其他人可以使用我的解决方案,所以我做出了决定

此外,如果您想在以前的操作系统版本下继续使用UIAlertView,则必须转换代码。这可能听起来很糟糕,我使用了以下方法:

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

if (sysVer < 7) {
  // your old solution
} else {
  .. // iOS7 dialog code
}
float sysVer=[[[UIDevice currentDevice]systemVersion]floatValue];
if(sysVer<7){
//你的老办法
}否则{
../iOS7对话框代码
}

(请注意,这绝不是一个真正的解决方案-如果苹果不想让我们在各种事情上使用对话框,那么我们可能不应该这样做。)

从iOS 7开始,您可以:

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

在标准警报视图中获取自定义内容。

我认为这不是活动指示器的问题。请检查我的更新。谢谢这是真的。Apple有意阻止警报上的
addSubview
。您有该声明的链接吗?@Keab42请参阅“UIAlertView类旨在按原样使用,不支持子类化。该类的视图层次结构是私有的,不能修改。”它可以无按钮吗?@RobCroll sure,我不小心留下了默认的xcode内容。请随意使用,我会尽快更新文件。谢谢你的努力。然而,这仍然是“马车”。如果您尝试将CustomIOS7AlertView添加到tableview,它仍然允许用户向下滚动tableview。使用时:CustomIOS7AlertView*alertView=[[CustomIOS7AlertView alloc]initWithParentView:self.superview];然后层次结构就乱七八糟了(即tableview标题出现在alertView上方。不过感谢您的帮助…我认为在TSAlertView决定更新到IOS7之前,请坚持使用它…@GeorgeAsda确保在initWithParentView:view方法中传递正确的视图。如果它是tableview,UIView将附加在那里-也许您希望传递视图控件。)取而代之的是r的视图。@Wimagguc我正试图通过uitableview Cellsome传递它!这对我来说很有效。不需要实现那些奇特的自定义内容。唯一的问题是你必须在
[alertView show]之前调用它
。这听起来像是将来可能不起作用的东西。它不是一个公共API,但它被应用商店上的应用程序接受。你可以说它和OP提到的使用addSubView一样有效,它一直工作到iOS 7。然而,由于这是苹果在iOS 7中引入的,我猜苹果自己的应用程序在它们在警报中显示的不仅仅是文本。回答太棒了!这比上面的解决方案效果好得多(这也会起作用,但这要容易得多)。这需要更多的投票。谢谢!