每当我打电话给[super layoutSubviews]时;在我的自定义UINaivigation栏上
*由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__ NSArrayM objectAtIndex:]:索引1超出范围[0 .. 0]”
这些是我可以覆盖的仅有的两种方法:
-(void) layoutSubviews
{
[super layoutSubviews];
for (UIView *view in self.subviews)
{
CGRect frame = view.frame;
frame.origin.y = 5;
view.frame = frame;
}
}
- (CGSize)sizeThatFits:(CGSize)size {
[self setTitleVerticalPositionAdjustment:-7 forBarMetrics:UIBarMetricsDefault];
CGRect frame = [UIScreen mainScreen].applicationFrame;
CGSize newSize = CGSizeMake(frame.size.width , 64);
return newSize;
}
该应用程序正在使用情节提要,并且在加载视图时,我会向UINavigationBar动态添加内容,但是即使我禁用了该内容注入,仍然会引发错误,它似乎是调用[super layoutSubviews]的行为;导致此异常的原因
有谁知道为什么会发生这种情况吗?
您可以看到抛出异常后,所有项目均已正确放置在UINavigationBar中。
亲切的问候,
帕特里克·J·奎因(Patrick J Quinn)。
最佳答案
从文档...
您不应该直接调用此方法。如果要强制
布局更新,请事先调用setNeedsLayout方法
到下一个图纸更新。如果您想更新您的布局
立即查看,请调用layoutIfNeeded方法。
您应该使用...
[super setNeedsLayout];
如果您根本需要调用它,我怀疑您实际上是这样做的。