删除视图和搜索栏之间的边框

Posted

技术标签:

【中文标题】删除视图和搜索栏之间的边框【英文标题】:Remove border between View and Search Bar 【发布时间】:2015-07-25 22:01:56 【问题描述】:

所以在 Xcode 中我试图创建一个无缝的搜索栏。所以我试图复制这样的东西

请注意状态栏的颜色与搜索栏的颜色相同。现在这是我的方法的结果。

我所做的是添加一个视图以用蓝色背景覆盖默认状态栏。然后我添加了一个搜索栏并将其背景更改为蓝色。出于某种原因,我最终在两者之间出现了黑色边框,这破坏了“无缝”设计。关于如何在 Swift 中删除黑色边框的任何想法?

【问题讨论】:

这似乎有效:***.com/questions/6868214/… 已被此用户尝试过:jslim.net/blog/2014/07/14/… 【参考方案1】:

对于 ios 7+:

searchBar.backgroundImage = UIImage()

否则这将适用于所有 iOS 版本:

searchBar.layer.borderWidth = 1
searchBar.layer.borderColor = thatBlueColor.CGColor

【讨论】:

其他部分也应该适用于 iOS 7+,根据此来源:jslim.net/blog/2014/07/14/… 是的,你是对的。但是,我更喜欢上面的那个。它更干净,不需要您手头有颜色。 刚刚做了this,但我仍然得到了边界。同样在做第一个时我得到一个错误:Cannot invoke 'setBackgroundImage' with an argument list of type '(UIImage)' @Idris 哎呀。试试看。 然后我最终得到Invalid use of '()' to call a value of non-function type 'CGColor'。我正在使用 Swift 2,如果这有所作为...【参考方案2】:

在 Xcode 8.3 和 Swift 3 中

    创建一个从你的搜索栏到你的 ViewController 的出口(我在这个例子中调用了我的 searchBarOutlet)。

    在 viewDidLoad 下方插入以下内容。

    self.searchBarOutlet.backgroundImage = UIImage()

您应该具备以下条件:

    override func viewDidLoad() 
    super.viewDidLoad()

         self.searchBarOutlet.backgroundImage = UIImage()

当您运行您的应用程序时,这些线条将消失(它们仍将在情节提要上可见)。

【讨论】:

【参考方案3】:

斯威夫特 4

searchBar.barTintColor = UIColor.white
searchBar.setBackgroundImage(UIImage.init(), for: UIBarPosition.any, barMetrics: UIBarMetrics.default)

示例图片

更新导航栏和搜索栏背景颜色的示例代码:

导航栏颜色

self.navigationController?.navigationBar.barTintColor = .blue

搜索栏颜色

searchBarProperty.backgroundColor = self.navigationController?.navigationBar.barTintColor

注意:导航栏和搜索栏颜色必须相同。

带有蓝色导航栏和蓝色搜索栏的示例图片

【讨论】:

这似乎只适用于白色导航栏。我正在尝试使用深蓝色的,但它仍然像你的一样是白色的(是的,我已经更改了 barTintColor 参数) 你应该检查导航栏和搜索栏颜色,如果两个颜色不一样,那么你需要改变导航栏颜色和搜索栏颜色,请查看我更新的答案 是的,我在 8 小时后就开始工作了……无论如何,谢谢。昨天投票了【参考方案4】:

在我的情况下,超出搜索栏的边缘还需要离开导航栏。

C#代码:

NavigationController.NavigationBar.ShadowImage = new UIImage();
NavigationController.NavigationBar.SetBackgroundImage (new UIImage (), UIBarMetrics.Default);

Swift 代码:

self.navigationController.navigationBar.shadowImage = UIImage()
self.navigationController.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)

【讨论】:

问题与 Swift 相关,而不是 C#。【参考方案5】:

移除顶部和底部默认边框的最佳解决方案是:

viewDidLoad中设置一个新的空searchBar背景布局例如:

searchBar.backgroundImage = UIImage()

【讨论】:

【参考方案6】:

我发现这些答案比他们需要的要复杂。您只需修改将 searchBar 视图和另一个视图绑定到 -1pts 的约束,使其与 searchBar 边距的高度完全重叠。

【讨论】:

【参考方案7】:

我在设置statusBar和searchBar半透明的时候也遇到了同样的情况。 在这种情况下,我无法用这里写的答案解决,但是我可以通过以下方法解决。

将 UIVisualEffectView 放在 self.view(您的 VC 视图)上 自定义searchBar类,背景透明 (也让statusBar透明)

(swift4代码)

    class TransparentSearchBar: UISearchBar 
        override init(frame: CGRect) 
            super.init(frame: frame)
        

        required init?(coder aDecoder: NSCoder) 
            fatalError("init(coder:) has not been implemented")
        

        override func layoutSubviews() 
            super.layoutSubviews()
            makeTransparentBackground()
        

        private func makeTransparentBackground() 
            for view in self.subviews 
                view.backgroundColor = UIColor.clear
                for subview in view.subviews 
                    if let imageview = subview as? UIImageView 
                        imageview.image = nil
                    
                
            
        

    

viewDidLoad (statusBar) 中的某处

    let statusWindow = UIApplication.shared.value(forKey:"statusBarWindow") as! UIView
    let statusBar = statusWindow.subviews[0] as UIView
    statusBar.backgroundColor = UIColor.clear

【讨论】:

以上是关于删除视图和搜索栏之间的边框的主要内容,如果未能解决你的问题,请参考以下文章

移除少数视图控制器的导航栏边框

如何在 SwiftUI 中删除主要内容视图和标签栏之间的间距?

移除导航栏和工具栏的边框

如何摆脱 UISearchBar 的边框?

使用 CSS 在 Bootstrap 中删除导航栏切换器汉堡图标的边框颜色

移除 UITableView 的边框,而不是分隔符