自定义导航标题偏移量 ios 11
Posted
技术标签:
【中文标题】自定义导航标题偏移量 ios 11【英文标题】:Custom Nav Title offset ios 11 【发布时间】:2017-09-20 22:49:39 【问题描述】:我有一个自定义导航项标题,它只是两个标签,一个在另一个之上,从 .xib 文件加载。
它是通过调用这个来加载的:
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 之前,这没有问题。
现在就是这样,没有我的 hack 修复,我希望我能做对:
下面是它的外观、iOS 10 之前的外观以及我的 hack 修复后的外观:
另外请注意,当展开转场动画时,视图会返回到错误的帧,即 22 像素太低。 我该如何解决这个问题?提前感谢您的帮助。
编辑:更详细的约束信息:
【问题讨论】:
我相信错误/解决方案将在您的布局约束中,您是否有机会展示您迄今为止定义的内容? 谢谢。这就是为什么我放了显示约束的屏幕截图,但我可以继续显示更详细的屏幕截图...我想我会编辑原始帖子... 好的,我放更多截图。请注意,这是从 .xib 加载并设置为导航项自定义标题视图。我不知道如何在加载的视图上设置约束,或者这是否可能。我认为导航项为我做到了。无论如何,它在 iOS 11 之前的当前限制条件下运行良好。 据我所知,您的 titleView 没有任何高度约束,似乎没有约束来确保“Label Sub Label Custom Header”的底部低于或等于“日期标签”。我相信如果您在标题视图上启用剪辑,这可能会变得很明显,您的日期标签可能刚好在标题视图的边界之外并且仍然可见,因为它没有被剪辑。 嗯,是的,这就是正在发生的事情。这在我的“hack fix”中得到了证明,我基本上将视图强制提高了 22 像素。特殊之处在于,在 iOS 11 之前我对此完全没有问题。如果这是一个约束问题,我如何为从 nib 加载的视图设置约束?该视图在 nib 文件本身中没有任何超级视图。我很难相信我需要手动编程约束并将它们添加到约束数组(将其约束到导航栏内容视图),除非这是我错过的 iOS 11 中引入的已知事物。 【参考方案1】:您应该在自定义视图标题 Xib 中添加一个布局约束,强制在较低标签与视图安全区域之间保持最小距离。有关 iOS 10/11 的完整工作示例,请参阅 https://github.com/ekscrypto/Swift-Tutorial-Custom-Title-View
【讨论】:
感谢您的帮助和示例项目。非常感激。我现在有另一个问题,您的示例项目也许您可以提供帮助。我将开始一个新线程。请参阅即将发布的链接。 我尝试检查您的项目,以便推送更改,但它们很简单。我添加了一个按钮来推动一个新的视图控制器。 ***.com/questions/46415168/… 它在 iOS 11 上运行良好,但在 iOS 10 之前运行良好。以上是关于自定义导航标题偏移量 ios 11的主要内容,如果未能解决你的问题,请参考以下文章