Auto-layout on a View for a Navigation Bar's title
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I have a simple class that creates a UIView containing a label. I want to use that view as the central section of a UINavigationBar, with 2 buttons on either side. The code below works well without adding the label:
class myView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .green
}
}
I call the class so:
let avatar = UIBarButtonItem(image: avatarImage, ...)
let otherButton = UIBarButtonItem(image: otherImage, ...)
navigationItem.leftBarButtonItems = [avatar]
navigationItem.rightBarButtonItems = [otherButton]
let headerTitle = myView(frame: .zero)
headerTitle.translatesAutoresizingMaskIntoConstraints = false
navigationItem.titleView = headerTitleView
But if I add the label inside the UIView:
class myView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .green
let theLabel = UILabel(frame: .zero)
theLabel.text = "The Title"
theLabel.textAlignment = .center
theLabel.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(theLabel!)
}
}
.. I see the label, but it is stuck to the far left of the view. If I try to add constraints to the label, something like this:
NSLayoutConstraint.activate([
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
.. it crashes, since the size of self (the UIView) is still .zero.
I've tried various combinations of layoutIfNeeded() and sizeToFit(), but with no success so far. How do I place a view as a title for a navigation bar, and layout elements inside that view?
ios swift uinavigationbar nslayoutconstraint
|
show 5 more comments
I have a simple class that creates a UIView containing a label. I want to use that view as the central section of a UINavigationBar, with 2 buttons on either side. The code below works well without adding the label:
class myView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .green
}
}
I call the class so:
let avatar = UIBarButtonItem(image: avatarImage, ...)
let otherButton = UIBarButtonItem(image: otherImage, ...)
navigationItem.leftBarButtonItems = [avatar]
navigationItem.rightBarButtonItems = [otherButton]
let headerTitle = myView(frame: .zero)
headerTitle.translatesAutoresizingMaskIntoConstraints = false
navigationItem.titleView = headerTitleView
But if I add the label inside the UIView:
class myView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .green
let theLabel = UILabel(frame: .zero)
theLabel.text = "The Title"
theLabel.textAlignment = .center
theLabel.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(theLabel!)
}
}
.. I see the label, but it is stuck to the far left of the view. If I try to add constraints to the label, something like this:
NSLayoutConstraint.activate([
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
.. it crashes, since the size of self (the UIView) is still .zero.
I've tried various combinations of layoutIfNeeded() and sizeToFit(), but with no success so far. How do I place a view as a title for a navigation bar, and layout elements inside that view?
ios swift uinavigationbar nslayoutconstraint
hi! did you try calling sizeToFit() after setting the text of your label? That helped me when I tried to place a label in my navigation bar
– joliejuly
Jan 3 at 20:26
Yes @joliejuly, I puttheLabel.sizeToFit()right after setting the text; it made no difference - still in upper left corner.
– coco
Jan 3 at 20:30
what crash ........................
– Sh_Khan
Jan 3 at 20:30
@Sh_Khan:libc++abi.dylib: terminating with uncaught exception of type NSException(a signal SIGABRT)
– coco
Jan 3 at 20:32
please share all console log temporarily
– Sh_Khan
Jan 3 at 20:36
|
show 5 more comments
I have a simple class that creates a UIView containing a label. I want to use that view as the central section of a UINavigationBar, with 2 buttons on either side. The code below works well without adding the label:
class myView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .green
}
}
I call the class so:
let avatar = UIBarButtonItem(image: avatarImage, ...)
let otherButton = UIBarButtonItem(image: otherImage, ...)
navigationItem.leftBarButtonItems = [avatar]
navigationItem.rightBarButtonItems = [otherButton]
let headerTitle = myView(frame: .zero)
headerTitle.translatesAutoresizingMaskIntoConstraints = false
navigationItem.titleView = headerTitleView
But if I add the label inside the UIView:
class myView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .green
let theLabel = UILabel(frame: .zero)
theLabel.text = "The Title"
theLabel.textAlignment = .center
theLabel.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(theLabel!)
}
}
.. I see the label, but it is stuck to the far left of the view. If I try to add constraints to the label, something like this:
NSLayoutConstraint.activate([
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
.. it crashes, since the size of self (the UIView) is still .zero.
I've tried various combinations of layoutIfNeeded() and sizeToFit(), but with no success so far. How do I place a view as a title for a navigation bar, and layout elements inside that view?
ios swift uinavigationbar nslayoutconstraint
I have a simple class that creates a UIView containing a label. I want to use that view as the central section of a UINavigationBar, with 2 buttons on either side. The code below works well without adding the label:
class myView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .green
}
}
I call the class so:
let avatar = UIBarButtonItem(image: avatarImage, ...)
let otherButton = UIBarButtonItem(image: otherImage, ...)
navigationItem.leftBarButtonItems = [avatar]
navigationItem.rightBarButtonItems = [otherButton]
let headerTitle = myView(frame: .zero)
headerTitle.translatesAutoresizingMaskIntoConstraints = false
navigationItem.titleView = headerTitleView
But if I add the label inside the UIView:
class myView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .green
let theLabel = UILabel(frame: .zero)
theLabel.text = "The Title"
theLabel.textAlignment = .center
theLabel.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(theLabel!)
}
}
.. I see the label, but it is stuck to the far left of the view. If I try to add constraints to the label, something like this:
NSLayoutConstraint.activate([
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
.. it crashes, since the size of self (the UIView) is still .zero.
I've tried various combinations of layoutIfNeeded() and sizeToFit(), but with no success so far. How do I place a view as a title for a navigation bar, and layout elements inside that view?
ios swift uinavigationbar nslayoutconstraint
ios swift uinavigationbar nslayoutconstraint
asked Jan 3 at 20:18
cocococo
1,8172144
1,8172144
hi! did you try calling sizeToFit() after setting the text of your label? That helped me when I tried to place a label in my navigation bar
– joliejuly
Jan 3 at 20:26
Yes @joliejuly, I puttheLabel.sizeToFit()right after setting the text; it made no difference - still in upper left corner.
– coco
Jan 3 at 20:30
what crash ........................
– Sh_Khan
Jan 3 at 20:30
@Sh_Khan:libc++abi.dylib: terminating with uncaught exception of type NSException(a signal SIGABRT)
– coco
Jan 3 at 20:32
please share all console log temporarily
– Sh_Khan
Jan 3 at 20:36
|
show 5 more comments
hi! did you try calling sizeToFit() after setting the text of your label? That helped me when I tried to place a label in my navigation bar
– joliejuly
Jan 3 at 20:26
Yes @joliejuly, I puttheLabel.sizeToFit()right after setting the text; it made no difference - still in upper left corner.
– coco
Jan 3 at 20:30
what crash ........................
– Sh_Khan
Jan 3 at 20:30
@Sh_Khan:libc++abi.dylib: terminating with uncaught exception of type NSException(a signal SIGABRT)
– coco
Jan 3 at 20:32
please share all console log temporarily
– Sh_Khan
Jan 3 at 20:36
hi! did you try calling sizeToFit() after setting the text of your label? That helped me when I tried to place a label in my navigation bar
– joliejuly
Jan 3 at 20:26
hi! did you try calling sizeToFit() after setting the text of your label? That helped me when I tried to place a label in my navigation bar
– joliejuly
Jan 3 at 20:26
Yes @joliejuly, I put
theLabel.sizeToFit() right after setting the text; it made no difference - still in upper left corner.– coco
Jan 3 at 20:30
Yes @joliejuly, I put
theLabel.sizeToFit() right after setting the text; it made no difference - still in upper left corner.– coco
Jan 3 at 20:30
what crash ........................
– Sh_Khan
Jan 3 at 20:30
what crash ........................
– Sh_Khan
Jan 3 at 20:30
@Sh_Khan:
libc++abi.dylib: terminating with uncaught exception of type NSException (a signal SIGABRT)– coco
Jan 3 at 20:32
@Sh_Khan:
libc++abi.dylib: terminating with uncaught exception of type NSException (a signal SIGABRT)– coco
Jan 3 at 20:32
please share all console log temporarily
– Sh_Khan
Jan 3 at 20:36
please share all console log temporarily
– Sh_Khan
Jan 3 at 20:36
|
show 5 more comments
1 Answer
1
active
oldest
votes
I guees it's an order error
self.addSubview(theLabel) // first
NSLayoutConstraint.activate([ // then second
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54029214%2fauto-layout-on-a-view-for-a-navigation-bars-title%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I guees it's an order error
self.addSubview(theLabel) // first
NSLayoutConstraint.activate([ // then second
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
add a comment |
I guees it's an order error
self.addSubview(theLabel) // first
NSLayoutConstraint.activate([ // then second
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
add a comment |
I guees it's an order error
self.addSubview(theLabel) // first
NSLayoutConstraint.activate([ // then second
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
I guees it's an order error
self.addSubview(theLabel) // first
NSLayoutConstraint.activate([ // then second
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
answered Jan 3 at 20:38
Sh_KhanSh_Khan
46.8k51433
46.8k51433
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54029214%2fauto-layout-on-a-view-for-a-navigation-bars-title%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
hi! did you try calling sizeToFit() after setting the text of your label? That helped me when I tried to place a label in my navigation bar
– joliejuly
Jan 3 at 20:26
Yes @joliejuly, I put
theLabel.sizeToFit()right after setting the text; it made no difference - still in upper left corner.– coco
Jan 3 at 20:30
what crash ........................
– Sh_Khan
Jan 3 at 20:30
@Sh_Khan:
libc++abi.dylib: terminating with uncaught exception of type NSException(a signal SIGABRT)– coco
Jan 3 at 20:32
please share all console log temporarily
– Sh_Khan
Jan 3 at 20:36