Ios 删除导航栏和工具栏的边框

Ios 删除导航栏和工具栏的边框,ios,swift,Ios,Swift,我在移除UISearchBar、UINavigationBar和UIToolBar的边界阴影时遇到问题。因此,基本上我有一个视图控制器,其中嵌入了一个UISearchController,下面是一个UIToolbar,其中包含一个UISegmentedControl。问题是,即使使用appearance()委托分别移除UINavigationBar、UISearchBar和UIToolbar的边框阴影,边框仍会显示在UISearchBar和UIToolbar之间 当我转到下一个屏幕时,我观察到U

我在移除UISearchBar、UINavigationBar和UIToolBar的边界阴影时遇到问题。因此,基本上我有一个视图控制器,其中嵌入了一个UISearchController,下面是一个UIToolbar,其中包含一个UISegmentedControl。问题是,即使使用appearance()委托分别移除UINavigationBar、UISearchBar和UIToolbar的边框阴影,边框仍会显示在UISearchBar和UIToolbar之间

当我转到下一个屏幕时,我观察到UINavigationBar没有边框阴影,因此,可以确定显示的边框不是UINavigationBar

extension AppDelegate {

    private func appearanceSetup() {
        UINavigationBar.appearance().barTintColor = .appBlueColor
        UINavigationBar.appearance().shadowImage = UIImage()
        UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
        UITextField.appearance().tintColor = .appBlueColor
        UISearchBar.appearance().setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
        UISearchBar.appearance().barTintColor = .appBlueColor
        UISearchBar.appearance().backgroundImage = UIImage()
        UIToolbar.appearance().setShadowImage(UIImage(), forToolbarPosition: .any)
        UIToolbar.appearance().barTintColor = .appBlueColor
        UIToolbar.appearance().layer.borderWidth = 1
        UIToolbar.appearance().layer.borderColor = UIColor.appBlueColor.cgColor
    }
}
我还发现了一件奇怪的事情,当我从UINavigationBar隐藏UISearchController时,UINavigationBar和UIToolBar之间没有边界。当我隐藏UIToolBar时,UINavigationBar之后也没有边框

extension AppDelegate {

    private func appearanceSetup() {
        UINavigationBar.appearance().barTintColor = .appBlueColor
        UINavigationBar.appearance().shadowImage = UIImage()
        UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
        UITextField.appearance().tintColor = .appBlueColor
        UISearchBar.appearance().setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
        UISearchBar.appearance().barTintColor = .appBlueColor
        UISearchBar.appearance().backgroundImage = UIImage()
        UIToolbar.appearance().setShadowImage(UIImage(), forToolbarPosition: .any)
        UIToolbar.appearance().barTintColor = .appBlueColor
        UIToolbar.appearance().layer.borderWidth = 1
        UIToolbar.appearance().layer.borderColor = UIColor.appBlueColor.cgColor
    }
}

有一次我遇到了类似的问题,
的出现并没有解决我的问题。所以我开始定制组件。我这样做是为了
UINavigationBar
,它工作了,尽管我的
UINavigationBar
被放在了故事板中,没有在代码中,但它仍然工作得很好。试试这个,让我知道:

class CustomNavigationBar: UINavigationBar
{
    override init(frame: CGRect) {
        super.init(frame: frame)
        setBackgroundImage(UIImage(), for: .default)
        shadowImage = UIImage()
        backgroundColor = <Your UIView.backgoundColor of type: UIColor>
        tintColor = UIColor.white
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setBackgroundImage(UIImage(), for: .default)
        shadowImage = UIImage()
        backgroundColor = <Your UIView.backgoundColor of type: UIColor>
        tintColor = UIColor.white
    }
}
试试这段代码,我希望它能解决您的问题{
override func viewDidLoad() {
        super.viewDidLoad()

        //MARK:- for default navigation bar

        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.white

        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for:.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.layoutIfNeeded()

    }
super.viewDidLoad()


好问题。提供一个小样本应用程序的链接,我们可以在其中看到问题/尝试看看这是我刚刚创建的演示,请克隆并查看一下。非常感谢@Habin。不知道导航栏的此类属性。我想知道这个属性是如何被披露的,因为它们不是ava我可以在开发者文档上下载吗?欢迎@RajatMishra。你的问题解决了吗?如果解决了,请投票并打勾,以便其他人可以找到答案。我在我的问题解决后进行了投票。但它说“声誉低于15的人所投的票会被记录,但不会改变公开显示的帖子分数。”我的意思是你已经对你的问题投了票,但用户如何知道哪个答案对你的问题是正确的,所以我要你投票并在正确答案上打勾。谢谢你。明白了。谢谢!谢谢你回来。我使用UISearchController的方法是独立的。我的意思是,UISearchCo下面的UISegmentedControl无论UISearchController是什么,都需要显示controller.ScopeButtonTiles不可能做到这一点,因为只有当UISearchController处于活动状态时,才会显示作用域按钮。好的,感谢您抽出时间来写。我将向您的问题发送一些要点。祝您好运如果您回答了一个问题,请尝试对您的答案进行简短描述。请参阅此处,
self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
override func viewDidLoad() {
        super.viewDidLoad()

        //MARK:- for default navigation bar

        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.white

        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for:.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.layoutIfNeeded()

    }
    //MARK:- for default navigation bar

    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    self.navigationItem.backBarButtonItem?.tintColor = UIColor.white

    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for:.default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.layoutIfNeeded()

}