我通过执行以下操作在导航栏中放置了 UIActivityIndicatorView。
在.h文件中
@property (strong, nonatomic) UIActivityIndicatorView *mySpinner;
在 .m 文件中
- (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 都很有效,这是我唯一的目标系统。该App前往Apple审核并通过,现已上架App Store。所以我从商店将它下载到我的一部手机(运行 iOS 8)上,然后将它下载到另一部运行 iOS 7 的手机上,当我使用 UIActivityIndicatorView 进入屏幕时它崩溃了。我重新启动 Xcode 并在 Release模式下运行该应用程序,并且能够使其再次崩溃。这就是消息。
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,但没有成功。我还尝试在 UIActivityIndicatorView 上使用自动布局,但这告诉我我还不能对此施加限制,因为 View 尚未准备好。
但是,如果我创建一个新项目并运行它,UIActivityIndicatorView 就会工作,就像我提交应用程序之前一样。我什至也在 Release模式下运行了测试。我已经删除了派生数据,清理,构建,重新启动,重新启动。但现在,在 iOS 7 中,如果我添加 UIActivityIndicatorView,应用程序总是会崩溃。有人对正在发生的事情有任何了解吗?我几乎删除了 viewDidLoad 方法中的所有内容,以查看是否是其他原因导致的,但无济于事。任何帮助,将不胜感激。现在我正在使用 if then 语句来检查 iOS 是 7 还是 8,如果是 8,我添加指示器,但我真的不想这样做。谢谢!!
我发现我的问题与 THIS 非常相似一个,但没有任何答案或评论。
最佳答案
如果您打算将 initWithCustomView:
与 UIBarButtonItem
一起用于导航 Controller 栏按钮项,您应该允许它设置自己的约束(通过不设置 translatesAutoresizingMaskIntoConstraints = NO
), 或者你必须自己布局。
在大多数情况下,自动布局可以在您要用作按钮的自定义 View 的 View 的 subview 上完成,然后您可以通过不设置 来允许包含的 View 根据需要展开translatesAutoresizingMaskIntoConstraints = NO
.
关于ios - UIActivityIndicatorView 仅在 Release模式下崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28637174/