每当我打电话给[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中正确定位。
亲切的问候,
Patrick J Quinn。
答案 0 :(得分:3)
来自文档...
您不应该直接调用此方法。如果你想强迫一个 布局更新,请先调用setNeedsLayout方法 到下一个图纸更新。如果你想更新你的布局 立即查看,调用layoutIfNeeded方法。
你应该使用......
[super setNeedsLayout];
如果你需要打电话,我怀疑你确实这样做。