以编程方式将自动布局约束添加到导航控制器

Ric*_*cha 4 ios autolayout ios-autolayout

我正在尝试为我在导航栏上添加的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]];
Run Code Online (Sandbox Code Playgroud)

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

如何添加此约束?

Lou*_*Tur 8

简而言之:你做不到.

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

来源:Apple Docs

您需要对其进行子类UINavigationBar化,然后实例化UINavigationController使用initWithNavigationBarClass:toolbarClass:以进一步执行某些操作.

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