iOS:尝试自定义导航栏时出错

Posted

技术标签:

【中文标题】iOS:尝试自定义导航栏时出错【英文标题】:iOS: Error when trying to customize Navigation bar 【发布时间】:2012-11-13 21:26:40 【问题描述】:

我正在尝试自定义导航栏的标题视图并收到错误消息。以下是相关代码:

UIView *topView = [[UIView alloc] init];
    topView.translatesAutoresizingMaskIntoConstraints=NO;

     self.navigationItem.titleView=topView;

    UIImage *image = [UIImage imageNamed: @"logojim_35.png"];

    UIImageView *imageView = [[UIImageView alloc] initWithImage: image];
    imageView.translatesAutoresizingMaskIntoConstraints=NO;
    [topView addSubview:imageView];

    UILabel *titleLabel = [[UILabel alloc] init];
    titleLabel.translatesAutoresizingMaskIntoConstraints=NO;
    titleLabel.text=@"ACPL Mobile";

    [topView addSubview:titleLabel];

    NSDictionary *views = NSDictionaryOfVariableBindings(topView,imageView,titleLabel);

    [topView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]-[titleLabel]|" options:nil metrics:nil views:views]];

这是我得到的错误:

2012-11-13 16:23:51.635 Mobile_ACPL[22177:12b03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UINavigationBar's implementation of -layoutSubviews needs to call super.'

知道问题出在哪里吗?

是的,我的项目需要自动布局。

【问题讨论】:

你覆盖layoutSubviews吗?如果你这样做,你会打电话给super吗? 这段代码是以什么方式运行的? @JoePasq 这是在视图控制器的 viewDidLoad 中调用的。 @AlexWayne 我没有继承 UINavigationBar。我需要吗?我试图创建一个视图并将其分配给导航栏的“titleView”属性。只要我不尝试添加约束,这似乎就可以工作。 【参考方案1】:

看看这个问题:Building a titleView programmatically with constraints (or generally constructing a view with constraints)

如果你不设置一个框架,标题视图不知道 x 和 y 与它的父级相关。

【讨论】:

以上是关于iOS:尝试自定义导航栏时出错的主要内容,如果未能解决你的问题,请参考以下文章

iOS 导航栏-返回按钮-自定义

ios15在隐藏导航栏时向后半滑动会留下顶部空白空间 - SwiftUI

uni-app之pages.json文件(包括自定义导航栏的颜色)

在ios中自定义导航栏

iOS 12 中的自定义导航标题

在 iOS 8 中自定义 PeoplePicker NavigationController 导航栏