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

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

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

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

【问题讨论】:

标签: ios xcode swift


【解决方案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 中

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

  2. 在 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 2020-02-09
          • 2014-01-09
          • 1970-01-01
          • 1970-01-01
          • 2014-12-05
          • 2021-01-14
          相关资源
          最近更新 更多