【发布时间】:2016-09-12 16:08:59
【问题描述】:
我实现了自定义导航栏高度,通过使用以下代码对其进行子类化
class TMNavigationBar: UINavigationBar {
///The height you want your navigation bar to be of
static let navigationBarHeight: CGFloat = 44.0
///The difference between new height and default height
static let heightIncrease:CGFloat = navigationBarHeight - 44
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
private func initialize() {
let shift = TMNavigationBar.heightIncrease/2
///Transform all view to shift upward for [shift] point
self.transform =
CGAffineTransformMakeTranslation(0, -shift)
}
override func layoutSubviews() {
super.layoutSubviews()
let shift = TMNavigationBar.heightIncrease/2
///Move the background down for [shift] point
let classNamesToReposition: [String] = ["_UINavigationBarBackground"]
for view: UIView in self.subviews {
if classNamesToReposition.contains(NSStringFromClass(view.dynamicType)) {
let bounds: CGRect = self.bounds
var frame: CGRect = view.frame
frame.origin.y = bounds.origin.y + shift - 20.0
frame.size.height = bounds.size.height + 20.0
view.frame = frame
}
}
}
override func sizeThatFits(size: CGSize) -> CGSize {
let amendedSize:CGSize = super.sizeThatFits(size)
let newSize:CGSize = CGSizeMake(amendedSize.width, TMNavigationBar.navigationBarHeight);
return newSize;
}
}
以下问题仅在 iOS 10 上出现:(栏和视图之间的黑色空间)
不知道那里发生了什么。但是在情节提要中它会生成此警告,并且无法在 IB 中修复它(警告仅在我更改 IB 中导航栏的子类时出现)。
【问题讨论】:
-
情节提要警告是关于宽度,而不是高度。它与您的代码无关。 ——问题是什么?你说“跟随问题”,但你从来没有说它是什么。
-
请查看更新后的截图,它在视图和导航栏之间显示黑色空间
-
那么是什么导致了黑色空间?导航栏的底部是否太高,或者视图的顶部是否太低?你有一个调试器。调试!在这种情况下,请使用视图调试器查看您的视图框架是什么。
-
感谢@matt 的精彩建议,请检查我更新后的问题以及我找到的答案。
-
您实际上可以将其作为答案而不是修改您的问题,两天后您可以接受您自己的答案。对于将来可能从您的工作中受益的其他人来说,这将是最有帮助的形式。
标签: ios swift storyboard uinavigationbar ios10