Custom Nav Title offset ios 11

2019-07-20 14:56发布

I have a custom navigation item title that is simply two labels, one on top of the other, loaded from a .xib file.

enter image description here

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:

enter image description here

And here is what it should look like, what it looked like prior to iOS 10, and how it looks with my hack fix:

enter image description here

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:

View DateLabel

TitleLabel

1条回答
姐就是有狂的资本
2楼-- · 2019-07-20 15:25

You should add a layout constraint in your custom view title Xib enforcing a minimum distance between the lower label to the safe area of the view. For a complete working example on iOS 10/11, see https://github.com/ekscrypto/Swift-Tutorial-Custom-Title-View

查看更多
登录 后发表回答