用swift写一个悬浮的searchbar

用swift写一个悬浮的searchbar

这次用代码布局实现下面这个悬浮着的搜索框。
img1
先交代一下背景:这是一个tabviewcontroller里的一个tabview,然后它还是一个navigationcontroller的rootcontroller。


首先,因为它是navigationcontroller里的,所以要隐藏掉自带的navigationbar,不然会影响美感

// MARK: - 隐藏navigationbar
self.navigationController?.isNavigationBarHidden = true

然后,新建一个用于承载searchbar的view,我称之为barView。整个搜索框的颜值就体现在这个view上,因为自带的searchbar对我来说太难修改它的外观了。

//设置搜索框的位置和尺寸
var barView = UIView()
barView = UIView(frame: CGRect(x:10, y:30, width:self.view.frame.width-20, height:40))
//设置搜索框的圆角、背景颜色、透明度等外貌属性
barView.layer.masksToBounds = true
barView.layer.cornerRadius = 10
barView.layer.backgroundColor = UIColor(red: 49/255, green: 151/255, blue: 230/255,alpha:0.9).cgColor

这时候,放搜索框的位置应该是长这样的:
img2
隐隐约约能看到背后的地图,开始有种悬浮的感觉了。

之后,就要把searchbar放到这个barView里了

var searchBar = UISearchBar()
searchBar = UISearchBar(frame: barView.bounds)
searchBar.placeholder = "请输入校园内地址"
searchBar.delegate = self
barView.addSubview(searchBar)

这时候就会看见长成这样的搜索框了:
img3
有两个问题,1:仔细看的话会发现barView上有两条杠;2:barView本身的蓝色变成了灰色。
其实问题产生的原因是searchbar本身的默认样式里是灰色的背景色,这个灰色背景色覆盖了barView的背景色,而且这个默认样式还使searchbar的输入文字部分的背景色成白色的。如果用storyboard布局的话就可以在storyboard里将default改成minimal,但是现在是代码布局。
img5

//问题一的解决方法(跟去除nc的bar底部的黑线很相似诶)
searchBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
//问题二的解决方法
searchBar.searchBarStyle = UISearchBarStyle.minimal

这时候,搜索框变成了这样:
img4
大概雏形已经出来了,可是placeholder里的字看不太清楚,所以需要改变一下字体的颜色,因为placeholder本身不能修改字体颜色,所以通过取出searchbar里的textfield来改变searchbar的placeholder的字体颜色:

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField

textFieldInsideSearchBar?.textColor = UIColor.white

let textFieldInsideSearchBarLabel = textFieldInsideSearchBar?.value(forKey: "placeholderLabel") as?UILabel

textFieldInsideSearchBarLabel?.textColor = UIColor.white

将以上代码整合起来,就可以实现图一的样式了!在实现这个样式的过程中,我遇到了:1、searchbar有黑线;2、改变不了searchbar的背景色;3、修改不了placeholder的样式,这几个困扰我比较久的问题,希望这篇文章能帮助到像我一样的swift3小白~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值