删除视图和搜索栏之间的边框
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 中删除主要内容视图和标签栏之间的间距?