优寡心,港视,长女的美丽人生印度
一、系统的searchbar
1、uisearchbar的中子控件及其布局
uiview(直接子控件) frame 等于 searchbar的bounds,view的子控件及其布局
2、改变searchbar的frame只会影响其中搜索框的宽度,不会影响其高度,原因如下:
二、改变uisearchbar的高度
1、方案
重写uisearchbar的子类(idsearchbar),重新布局uisearchbar子控件的布局
增加成员属性contentinset,控制uisearchbartextfield距离父控件的边距
2、具体实现
重写uisearchbar的子类
class idsearchbar: uisearchbar { }
增加成员属性contentinset(可选类型),控制uisearchbartextfield距离父控件的边距,监听其值的改变,重新布局searchbar子控件的布局
var contentinset: uiedgeinsets? { didset { self.layoutsubviews() } }
重写layoutsubviews()布局searchbar的子控件
override func layoutsubviews() { super.layoutsubviews() // view是searchbar中的唯一的直接子控件 for view in self.subviews { // uisearchbarbackground与uisearchbartextfield是searchbar的简介子控件 for subview in view.subviews { // 找到uisearchbartextfield if subview.iskindofclass(uitextfield.classforcoder()) { if let textfieldcontentinset = contentinset { // 若contentinset被赋值 // 根据contentinset改变uisearchbartextfield的布局 subview.frame = cgrect(x: textfieldcontentinset.left, y: textfieldcontentinset.top, width: self.bounds.width - textfieldcontentinset.left - textfieldcontentinset.right, height: self.bounds.height - textfieldcontentinset.top - textfieldcontentinset.bottom) } else { // 若contentset未被赋值 // 设置uisearchbar中uisearchbartextfield的默认边距 let top: cgfloat = (self.bounds.height - 28.0) / 2.0 let bottom: cgfloat = top let left: cgfloat = 8.0 let right: cgfloat = left contentinset = uiedgeinsets(top: top, left: left, bottom: bottom, right: right) } } } } }
三、idsearchbar使用示例
1、未设置contentinset
设置searchbar的frame
searchbar.frame = cgrect(x: 80, y: 100, width: 200, height: 40)
效果如图
2、设置contentinset
设置searchbar的frame
searchbar.frame = cgrect(x: 80, y: 100, width: 200, height: 40)
设置searchbar的contentinset
// 设置contentinset searchbar.contentinset = uiedgeinsets(top: 0, left: 8, bottom: 0, right: 8)
效果如图
四、idsearchbar的设计原则
1、注意
2、设计原则
以上就是本文的全部内容,希望对大家的学习有所帮助。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
网友评论