Ios 如何使用swift隐藏uinavigationbar发际线

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

关于这个问题,我找到了一个很好的答案,看看这里

但我想知道如何用swift实现它,我已经用这种方式尝试过了

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)