拨打" [super layoutSubviews]"抛出" [__ NSArrayM objectAtIndex:]:索引1超出界限"例外

时间:2014-03-03 13:38:06

标签: ios iphone ios7 uinavigationbar

每当我打电话给[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。

1 个答案:

答案 0 :(得分:3)

来自文档...

  

您不应该直接调用此方法。如果你想强迫一个   布局更新,请先调用setNeedsLayout方法   到下一个图纸更新。如果你想更新你的布局   立即查看,调用layoutIfNeeded方法。

你应该使用......

[super setNeedsLayout];

如果你需要打电话,我怀疑你确实这样做。