调用"[super layoutSubviews]"引发"[__NSArrayM objectAtIndex:]: index 1 beyond bounds"异常



每当我调用[super layoutSubviews]时;在我的自定义UINaivigation栏上,它都会抛出
* 由于未捕获的异常"NSRangeException"而终止应用程序,原因:"* -[__NSArrayM对象索引:]:索引 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,但即使我禁用此内容注入,仍然会抛出错误,它似乎是调用 [超级布局Subviews] 的行为; 这导致了此异常,

有没有人知道为什么会发生这种情况?

您可以看到,在引发异常后,所有项目都已正确放置在UINavigationBar中。

亲切问候

帕特里克·奎因。

从文档中...

不应直接调用此方法。如果要强制 布局更新,请调用 setNeedsLayout 方法进行更新,以在之前执行此操作 到下一个图形更新。如果要更新布局 视图立即调用布局如果需要的方法。

你应该使用...

[super setNeedsLayout];

如果你需要打电话给它,我怀疑你真的这样做了。

相关内容

最新更新