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

时间:2015-04-10 22:33:17

标签: ios objective-c uiimageview uistoryboard uinavigationitem

我可以在代码中非常轻松地将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;

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

这就是我所做的:

  1. 将UIView拖放到我的VC导航项目之上。
  2. 将UIImageView拖放到UIView
  3. 之上
  4. 添加宽度/高度/前导/上限约束
  5. 设置UIImageView的图像属性
  6. 我还将我的UIView的背景设置为红色(好吧,更像是烧焦的橙色)以说明问题。

    以下是事情的解决方法:

    enter image description here

    我很惊讶这一直很困难。有什么想法吗?

5 个答案:

答案 0 :(得分:18)

在故事板界面构建器

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

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

after dragging UIView over the title

答案 1 :(得分:5)

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

另一种选择是

  1. 使用autolayout
  2. 在单独的xib 中创建视图,不含
  3. 将xib加载到代码中
  4. setTranslatesAutoresizingMaskIntoConstraints to true
  5. 将titleView分配给视图
  6. 根据我的经验,对navigationBar中的任何视图使用autolayout都不能很好地工作并导致意外的结果。例如,我遇到了错误,其中呈现UIActivityViewController导致意外约束被添加到navigationItem的titleView。

    在: enter image description here

    演示UIActivityViewController并跳过第3步后: enter image description here

答案 2 :(得分:2)

对于那些发现自己在Xcode 8中在UIBarButtonItem中添加自定义视图或UIButton的问题的人来说,解决办法是:Xcode现在仅接受在控制器的视图属性中拖动(Xcode 7允许直接拖动到UINavigationItem)。如果删除控制器的view,则可以将项目拖动到导航栏上。因此,创建新的空导航控制器,删除根视图控制器内的主视图,将项目拖动到导航栏,复制此导航项(而不是栏本身)并将其粘贴到目标控制器,它将替换旧的导航项。删除那个空控制器后。 PROFIT!

似乎苹果Xcode团队为开发人员提供了比他们的主要产品更激情的新任务。

答案 3 :(得分:2)

您应该先将UIView拖到navigationItme上,然后再将imageView拖到视图上。情节提要中的navigationItem的titleView不接受作为UIView子类的对象。它仅接受UIView类。

将imageView添加到视图中

Add the imageView onto a view

答案 4 :(得分:0)

这个奇怪的问题与大小等级有关系。

事实上,我遇到了同样的问题,解决方法是:

  1. 将故事板的大小等级设置为Any,Any
  2. 将视图拖放到导航栏项目中。
  3. 重置故事板的大小等级。
  4. 一切都像魅力一样!

    我认为将视图添加到尺寸类未设置为Any,Any的导航项中会导致问题。

    希望这适用于所有人,因为这真的太可怕了:[。