UIActivityIndi​​catorView仅在发布模式下崩溃

时间:2015-02-20 19:56:24

标签: ios objective-c uiactivityindicatorview

我通过执行以下操作在导航栏中放置了UIActivityIndi​​catorView。

<。>文件中的

@property (strong, nonatomic) UIActivityIndicatorView *mySpinner;
<。>文件中的

- (void)viewDidLoad
{
    [super viewDidLoad];

    _mySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    _mySpinner.translatesAutoresizingMaskIntoConstraints = NO;
    _mySpinner.hidesWhenStopped = YES; 
    UIBarButtonItem *spinnerButton = [[UIBarButtonItem alloc] initWithCustomView:_mySpinner];
    self.navigationItem.rightBarButtonItem = spinnerButton;
    [_mySpinner startAnimating];

    //some other stuff
}

这适用于iOS 7和iOS 8,这是我定位的唯一两个系统。该应用程序前往Apple审核,通过,现在在App Store上。因此,我将其下载到我的一部手机(运行iOS 8),它可以在商店运行,下载到另一部运行iOS 7的手机,当我使用UIActivityIndi​​catorView进入屏幕时它会崩溃。我启动Xcode并在发布模式下运行App,并且能够再次崩溃。这是消息。

Assertion failure in -[UINavigationBar layoutSublayersOfLayer:]

和这个

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UINavigationBar's implementation of -layoutSubviews needs to call super.'

我试图调用layoutSublayersOfLayer,但这不起作用。我还尝试在UIActivityIndi​​catorView上使用自动布局,但这告诉我,我还不能对此进行约束,因为视图尚未就绪。

但是,如果我创建一个新项目并运行它,UIActivityIndi​​catorView就像我提交应用程序之前一样。我甚至也在发布模式下运行测试。我删除了派生数据,清理,构建,重启,重启。但是现在,在iOS 7中,如果添加UIActivityIndi​​catorView,应用程序将始终崩溃。有没有人对正在发生的事情有任何见解?我几乎从viewDidLoad方法中删除了所有内容,看看是否是导致它的其他东西,但无济于事。任何帮助,将不胜感激。现在我正在使用if then语句检查iOS是7还是8,如果8我添加指标,但我真的不想这样做。谢谢!

我发现我的问题与THIS非常相似,但没有任何答案或评论。

1 个答案:

答案 0 :(得分:1)

如果您要将initWithCustomView:UIBarButtonItem一起用于导航控制器栏按钮项,则应允许其设置自己的约束(通过NOT设置{{ 1}}),或者你必须自己解决。

在大多数情况下,可以在您要用作按钮的自定义视图的视图的子视图上执行自动布局,然后您可以根据需要通过不设置{来允许包含视图展开{1}}。