在故事板中添加navigationItem.titleView失败

dji*_*i33 9 objective-c uiimageview uinavigationitem ios uistoryboard

我可以在代码中非常轻松地将titleView添加到我的navigationItem:

UIImageView *navImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nav_logo"]];
UIView *titleView = [[UIView alloc] initWithFrame:navImageView.frame];
[titleView addSubview:navImageView];
self.navigationItem.titleView = titleView;
Run Code Online (Sandbox Code Playgroud)

但是,我正试图在我的故事板中做到这一点,而且我的失败是悲惨的.

这就是我所做的:

  1. 将UIView拖放到VC的导航项顶部.
  2. 将UIImageView拖放到UIView之上
  3. 添加宽度/高度/前导/顶部约束
  4. 设置UIImageView的image属性

我还将我的UIView的背景设置为红色(好吧,更像是烧焦的橙色)来说明问题.

事情是如何呈现出来的:

在此输入图像描述

我很惊讶这一直很困难.有任何想法吗?

mat*_*liu 18

在故事板界面构建器中

  • 选择视图控制器
  • 在属性检查器(⌘⌥4)中的"模拟度量标准"下,对于"顶栏"选择器,选择其中一个导航栏
  • 然后你应该可以在故事板上的标题上拖动UIView
  • 如果您愿意,可以将"顶栏"设置更改回"推断"

这是在标题上拖动UIView后的故事板图像:

将UIView拖过标题后


小智 5

故事板中的导航项目不可能具有自动布局约束.我相信你实际上是将视图拖到实际的视图控制器上.您只能将barButtonItems拖入navigationItem.

另一种选择是

  1. 使用autolayout的情况下在单独的xib中创建视图
  2. 在代码中加载xib
  3. setTranslatesAutoresizingMaskIntoConstraints为true
  4. 将titleView分配给视图

根据我的经验,使用自动布局与navigationBar中的任何视图都不能很好地工作并导致意外的结果.例如,我遇到了错误,其中呈现UIActivityViewController导致意外的约束被添加到navigationItem的titleView.

之前: 在此输入图像描述

在演示UIActivityViewController并跳过第3步之后: 在此输入图像描述