自定义导航标题偏移ios 11

时间:2017-09-20 22:49:39

标签: ios uinavigationitem ios11 titlebar

我有一个自定义导航项标题,只是两个标签,一个在另一个上面,从.xib文件加载。

enter image description here

通过调用它来加载它:

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
  }
  ...
}

它定义如下:

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
  }
}

现在,它被精确地推下了22个像素,这隐藏了底部标签。

我必须在viewDidAppear中设置此视图的框架才能将其设置为直线。我尝试了viewWillAppear和其他几件事。我真的不得不隐藏它,设置它,然后显示它,这显然是不对的。

在iOS 11之前,这没有问题。

现在,没有我的黑客修复,我希望我能做对:

enter image description here

以下是它应该是什么样子,它在iOS 10之前的样子,以及它在我的黑客修复中的外观:

enter image description here

另请注意,当展开segue动画时,视图会回到不正确的帧,22像素太低。 如何解决此问题?提前感谢您的帮助。

编辑:更详细的约束信息:

View DateLabel

TitleLabel

1 个答案:

答案 0 :(得分:2)

您应该在自定义视图标题Xib中添加布局约束,强制执行下标签与视图安全区域之间的最小距离。有关iOS 10/11的完整工作示例,请参阅https://github.com/ekscrypto/Swift-Tutorial-Custom-Title-View