Adding autolayout constraints to navigation controller programmatically
Solution 1
In short: you can't.
The navigation controller manages the creation, configuration, and display of the navigation bar and optional navigation toolbar. It is permissible to customize the navigation bar’s appearance-related properties but you must never change its frame, bounds, or alpha values directly ... A navigation controller builds the contents of the navigation bar dynamically using the navigation item objects (instances of the UINavigationItem class) associated with the view controllers on the navigation stack
You would need to subclass the UINavigationBar
and then instantiate the UINavigationController
using initWithNavigationBarClass:toolbarClass:
to do something further.
Though if you're looking for ways to customize the navbar, UIKit User Interface Guide is a good start to know what you may be able to do. But if it's going to be a text label, consider setting the bar's title
property, for example.
Solution 2
Another way, after adding your custom view as a subview to UINavigationBar
, manually setup position and size with an old fashion way by updating .frame
property. It isn't a "flexible" solution, but simple and fast.
Richa
Updated on June 16, 2022Comments
-
Richa over 1 year
I am trying to add constraints to a UI label I added on a navigation bar. The UI label shows a running timer
Here is my code,
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]];
But I get the error 'Cannot modify constraints for UINavigationBar managed by a controller' when I run the app.
How do I add this constraint?