5

我正在尝试向导航栏上添加的 UI 标签添加约束。UI 标签显示正在运行的计时器

这是我的代码,

self.label = [[UILabel alloc] initWithFrame:CGRectMake(550, 15, 150, 14)];
self.label.text = @"Label";
[self.label setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.navigationController.navigationBar addSubview:self.label];

[self.navigationController.navigationBar addConstraint:[NSLayoutConstraint constraintWithItem:self.label
                                                       attribute:NSLayoutAttributeTrailing
                                                       relatedBy:NSLayoutRelationEqual
                                                          toItem:self.navigationController.navigationBar
                                                       attribute:NSLayoutAttributeTrailing
                                                      multiplier:1.0f
                                                        constant:-20.0f]];

但是当我运行应用程序时,我收到错误“无法修改控制器管理的 UINavigationBar 的约束”。

如何添加此约束?

4

3 回答 3

8

简而言之:你不能。

导航控制器管理导航栏和可选导航工具栏的创建、配置和显示。允许自定义导航栏的外观相关属性,但绝不能直接更改其框架、边界或 alpha 值……导航控制器使用导航项对象(UINavigationItem 的实例)动态构建导航栏的内容类)与导航堆栈上的视图控制器相关联

资料来源:苹果文档

您需要对 the 进行子类UINavigationBar化,然后实例化UINavigationControllerusinginitWithNavigationBarClass:toolbarClass:以做进一步的事情。

虽然如果您正在寻找自定义导航栏的方法,UIKit 用户界面指南是了解您可以做什么的良好开端。但是,如果它将是一个文本标签,请考虑设置栏的title属性,例如。

于 2015-02-24T23:22:53.387 回答
1

另一种方法是,在将自定义视图作为子视图添加到 后,通过更新属性UINavigationBar以旧方式手动设置位置和大小。.frame这不是一个“灵活”的解决方案,而是简单快捷。

于 2017-03-28T07:09:40.650 回答
0

我最终将计时器标签添加为导航栏上的右键栏项目。这是一种 hacky 方法。但由于无法添加约束,因此这是一种解决方法。

于 2015-02-26T19:23:45.120 回答