I have a custom navigation item title that is simply two labels, one on top of the other, loaded from a .xib file.
It's loaded by calling this:
class Utilities {
/// Title and subtitle format custom title in Navigation bar. Top and bottom text are centered on one another.
///
/// - Parameters:
/// - navigationItem: The receiving controller's navigation item.
/// - titleText: Top text to be displayed a little larger and more bold.
/// - subtitleText: Bottom text to be displayed a little smaller and less bold.
class func addCustomNavigationTitle(navigationItem: UINavigationItem, titleText: String, subtitleText: String) {
let customNavigationTitleView = LabelSubLabelCustomHeaderView.instanceFromNib() as! LabelSubLabelCustomHeaderView
customNavigationTitleView.titleLabel.text = titleText
customNavigationTitleView.dateLabel.text = subtitleText
navigationItem.titleView = customNavigationTitleView
}
...
}
It's defined as this:
class LabelSubLabelCustomHeaderView: UIView {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var dateLabel: UILabel!
class func instanceFromNib() -> UIView {
return UINib(nibName: "LabelSubLabelCustomHeaderView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
}
}
Now, it's pushed down by exactly 22 pixels, which hides the bottom label.
I have to set the frame of this view in the viewDidAppear in order to set it straight. I tried viewWillAppear and several other things. I'm literally having to hide it, set it, then show it, which is clearly not right.
Prior to iOS 11, this worked no problem.
Here it is now, without my hack fix, which I hope I can make right:
And here is what it should look like, what it looked like prior to iOS 10, and how it looks with my hack fix:
Also please note that when the unwind segue is animating, the view goes back to the incorrect frame, being 22 pixels too low. How can I fix this? Thanks for any help in advance.
Edit: More detailed constraint info: