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

如果您根本需要调用它,我怀疑您实际上是这样做的。

10-08 05:25
查看更多