Ios 如何使用swift隐藏uinavigationbar发际线
关于这个问题,我找到了一个很好的答案,看看这里 但我想知道如何用swift实现它,我已经用这种方式尝试过了Ios 如何使用swift隐藏uinavigationbar发际线,ios,swift,uinavigationbar,Ios,Swift,Uinavigationbar,关于这个问题,我找到了一个很好的答案,看看这里 但我想知道如何用swift实现它,我已经用这种方式尝试过了 func findHairlineImageViewUnder(view:UIView!) { if view is UIImageView && view.bounds.size.height <= 1.0 { return view } var subview: UIView for subview in vi
func findHairlineImageViewUnder(view:UIView!) {
if view is UIImageView && view.bounds.size.height <= 1.0 {
return view
}
var subview: UIView
for subview in view.subviews {
var imageView:UIImageView = self.findHairlineImageViewUnder(subview)
if imageView {
return imageView
}
}
}
我做不到,因为编译器告诉我
“UIView”不能转换为
无法将表达式的类型“AnyObject”转换为类型“UIImageView”
类型“UIImageView”不符合协议“BoooleanType”
我知道为什么会出现这些错误,但我如何才能修复它 代码中存在一些问题 您尚未指定返回类型,因此编译器正在尝试为您找出它,但遇到了问题。您应该指定返回类型为UIView?;它应该是可选的,因为您可能无法找到视图,需要返回nil。 在for循环之前不需要声明子视图;for循环将隐式地执行此操作。 如果不强制转换,将imageView声明为UIImageView将不起作用。但是,您首先并不需要将其设置为UIImageView,您可以让swift处理它。 通过在1中进行更改,您现在可以使用简化for循环的内部,如果让foundView=self.findHairlineImageViewUndersubview{…} 如果找不到要查找的视图,则永远不会从函数返回任何内容。这将导致swift中出现编译错误,因此请确保在最后返回nil。 以下是具有上述修复程序的工作实现:
func findHairlineImageViewUnder(view:UIView!) -> UIView? {
if view is UIImageView && view.bounds.size.height <= 1.0 {
return view
}
for subview in view.subviews as [UIView] {
if let foundView = self.findHairlineImageViewUnder(subview) {
return foundView
}
}
return nil
}
这个扩展应该可以做到这一点
extension UINavigationController {
func hairLine(hide hide: Bool) {
//hides hairline at the bottom of the navigationbar
for subview in self.navigationBar.subviews {
if subview.isKindOfClass(UIImageView) {
for hairline in subview.subviews {
if hairline.isKindOfClass(UIImageView) && hairline.bounds.height <= 1.0 {
hairline.hidden = hide
}
}
}
}
}
}
navigationController?.hairLine(hide: true)